GNU/Linux >> Tutoriels Linux >  >> Linux

Que se passe-t-il si mv est interrompu ?

Si vous déplacez un répertoire sur le même système de fichiers, vous déplacez uniquement l'entrée de répertoire d'un emplacement du système de fichiers à un autre. Par exemple, mv /source/dir /target/dir supprimera l'entrée de répertoire de dir à partir de /source et créez-en un nouveau en /target . Cela se fait par un appel système atomique (c'est-à-dire sans interruption). L'inode contenant les entrées de répertoire de dir ainsi que le contenu réel du répertoire lui-même n'est pas affecté.

Si vous déplacez le répertoire d'un système de fichiers à un autre, tous les fichiers sont d'abord copiés dans le nouveau système de fichiers, puis dissociés du système d'origine. Donc si vous interrompez mv pendant la copie, vous pouvez vous retrouver avec deux copies de certains fichiers - à l'ancien emplacement et au nouveau.


L'implémentation GNU itère sur les arguments de la ligne de commande, tente d'abord de renommer et, si cela échoue, copie récursivement puis supprime récursivement la source. Alors

mv a b c/

supprimera un avant de copier b , et ne commencera pas à supprimer quoi que ce soit dans a avant que la copie de destination ne soit terminée.

Notez que cela s'applique uniquement à l'implémentation GNU.

Pour clarifier : si un est un répertoire contenant d et e , et b est un fichier, la commande sera

  • créer un c/a
  • copier a/d -> c/a/d
  • copier a/e -> c/a/e
  • supprimer a/d
  • supprimer un/e
  • supprimer un
  • copie b -> c/b
  • supprimer b

Vous déplacez un répertoire, interrompez le déplacement et le répertoire d'origine restera intact :

$ mv a b/

Si vous déplacez plusieurs répertoires, chacun sera intact sur la source ou la destination, selon le moment où vous avez interrompu :

$ mv a b c/

Comment j'ai obtenu ma réponse :

$ mv --version
mv (GNU coreutils) 8.21

$ info mv
... It first uses some of the same code that's used by `cp -a'
to copy the requested directories and files, then (assuming the copy
succeeded) it removes the originals.  If the copy fails, then the part
that was copied to the destination partition is removed.  If you were
to copy three directories from one partition to another and the copy of
the first directory succeeded, but the second didn't, the first would
be left on the destination partition and the second and third would be
left on the original partition.

À titre de test, j'ai copié un grand dossier dans un répertoire NFS, interrompu, et le nombre de fichiers dans mon grand dossier source est resté le même, et le contenu partiel a été laissé sur le répertoire NFS. J'ai utilisé "find . -type f | wc -l" pour vérifier.

Il semble que la réponse de Simon soit correcte.


Linux
  1. A quoi servent les inodes ?

  2. Que renvoie la commande Ls -al .* ?

  3. Que se passe-t-il si je désactive et désinstalle Plymouth ?

  4. Quel est l'intérêt de chiffrer le répertoire personnel ?

  5. Que produit pwd ?

Que sont les microservices ? Introduction à l'architecture des microservices

Que se passe-t-il lorsqu'un thread bifurque ?

Quel est le moyen le plus rapide de déplacer un million d'images d'un répertoire à un autre sous Linux ?

SCP - pas un répertoire - Qu'est-ce que je fais de mal ?

Qu'entend-on par monter un périphérique sous Linux ?

Que se passe-t-il si vous supprimez un fichier de périphérique ?