96 votes

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

Que se passe-t-il si le Linux mv est interrompue ? Disons que je déplace un répertoire entier vers un autre endroit et que je l'interromps pendant le déplacement. Le répertoire source restera-t-il intact ?

71voto

bmk Points 2015

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

Si vous déplacez le répertoire d'un système de fichiers à un autre, tous les fichiers sont d'abord copiés sur 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 nouvel emplacement.

38voto

Howard Hoffman Points 303

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

mv a b c/

supprimera a avant de copier b et ne commencera pas à effacer quoi que ce soit dans la base de données de l'UE. a avant que la copie de destination ne soit terminée.

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

Pour clarifier : si a est un répertoire contenant d y e y b est un fichier, l'ordre sera

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

12voto

user79878 Points 221

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 d'eux sera intact sur la source ou la destination, selon le moment où vous l'avez interrompu :

$ mv a b c/

Comment j'ai eu 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.

En guise de test, j'ai copié un grand dossier sur un répertoire NFS, je l'ai 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.

On dirait que la réponse de Simon est correcte.

9voto

bhak Points 91

La réponse acceptée est définitivement erronée en ce qui concerne le déplacement entre les systèmes de fichiers - un fait qui m'a déjà sauvé de nombreux problèmes à plusieurs reprises. Lors du déplacement d'un répertoire qui contient des sous-répertoires, aucun fichier d'un sous-répertoire ne sera supprimé avant que le sous-répertoire entier n'ait été copié. C'est d'ailleurs la signification réelle de "objet par objet" - un sous-répertoire EST un objet (fichier) et donc son intégrité doit être préservée par une copie complète à destination avant que quoi que ce soit puisse être supprimé. La réponse de Simon me semble donc être la bonne.

5voto

Si vous voulez interrompre mv parce que vous voulez vous déconnecter du terminal, vous pouvez simplement l'envoyer en arrière-plan :

* press Ctrl+Z

# bg
# disown

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X