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.