GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi mv ne peut-il pas gérer l'existence d'un répertoire de même nom dans la destination ?

mv et rsync ne sont pas des programmes similaires. En particulier, mv tente souvent de simplement renommer des objets. S'il se trouve dans le même système de fichiers, il ne copie pas du tout le contenu.

Si vous n'aviez pas déjà imperative_PLs/fortran , puis mv prendrait le fortran existant répertoire et renommez-le à cet endroit dans l'arborescence.

Mais vous avez déjà un répertoire (avec du contenu) à cet emplacement. Étant donné qu'un nom ne peut référencer qu'un seul objet, le répertoire existant doit être soit supprimé, soit renommé. mv suppose que vous ne voulez faire ni l'un ni l'autre et abandonne.

rsync copie à la place les fichiers individuels et autres contenus dans fortran et les place dans le imperative_PLs/fortran existant répertoire.

Pensez-y comme rename à la place, et le comportement peut sembler plus compréhensible.


mv est en fait rename sous la couverture.

Si vous déplacez un fichier vers un autre fichier, mv suppose que vous savez ce que vous faites et écrasez le fichier de destination.

Si vous déplacez un répertoire vers un autre répertoire, mv suppose que vous souhaitez conserver le nom de base de votre répertoire d'origine et le créer dans le répertoire cible. S'il n'y a pas encore de répertoire portant ce nom côté destination, ou si un répertoire portant ce nom existe mais est vide, l'opération réussit.

Cependant, si le répertoire cible existe déjà et n'est pas vide, ce n'est plus un rename mais cela devrait être une suppression récursive de fichiers et de répertoires. rename n'est pas conçu pour le faire donc il échoue, mv ne va pas plus loin car il suppose que vous ne vouliez pas le faire et échoue également.


  1. mv ne fonctionne pas dans ce cas car il n'a pas été conçu pour le faire. Les appels système sont (probablement) soit

    • Déplacer vers le même système de fichiers :rename (à l'origine link et unlink )
    • Déplacement entre les systèmes de fichiers :copie de fichier récursive suivie de unlink récursif
  2. Opinion :Je pense que ce n'est pas tant qu'il a été conçu pas fonctionner, car il n'a pas été conçu pour gérer ce cas d'utilisation. Pour un outil "simple" destiné à bien faire une chose, vous devez fournir un ensemble de commutateurs à indiquer à mv lequel de ces chemins d'action à prendre :

    • Pour renflouer avec une erreur, comme dans l'implémentation actuelle
    • Pour fusionner, renflouer avec une erreur si un fichier existe déjà
    • Pour fusionner, en remplaçant tous les fichiers cibles qui existent déjà

Si l'action de fusion/remplacement est ce que vous voulez, vous pouvez l'implémenter assez facilement avec cp suivi de rm , ou en utilisant l'un des utilitaires de copie d'arborescence de fichiers tar , pax , etc.


Linux
  1. Pourquoi Rm peut-il supprimer les fichiers en lecture seule ?

  2. Fichiers Cat avec répertoire ?

  3. Fusionner des dossiers avec Mv ?

  4. Pourquoi ne puis-je pas utiliser Cd dans un script Bash ? ?

  5. Utiliser –exclude avec la commande Du ?

Pourquoi je m'en tiens à xterm

Commande Rsync sous Linux avec des exemples

Commande de CD Linux avec exemples

Pourquoi puis-je me connecter avec des mots de passe partiels ? ?

Linux peut-il gérer des écrans ultra haute résolution ?

Pourquoi est-ce que je ne peux pas planter mon système avec une bombe à fourche ?