Se sposti una directory sullo stesso file system, sposti solo la voce della directory da una posizione nel file system a un'altra. Ad esempio, mv /source/dir /target/dir
eliminerà la voce di directory di dir
da /source
e creane uno nuovo in /target
. Questo viene fatto da una chiamata di sistema atomica (cioè ininterrotta). L'inode contenente le voci della directory di dir
così come il contenuto effettivo della directory stessa non è interessato.
Se sposti la directory da un file system a un altro, tutti i file vengono prima copiati nel nuovo file system e quindi scollegati da quello originale. Quindi se interrompi mv
durante la copia, potresti ritrovarti con due copie di alcuni file, nella vecchia posizione e in quella nuova.
L'implementazione GNU itera sugli argomenti sulla riga di comando, tenta prima di rinominare e, se fallisce, copia ricorsivamente e quindi elimina ricorsivamente la fonte. Quindi
mv a b c/
eliminerà a prima di copiare b e non inizierà a eliminare nulla in a prima che la copia di destinazione sia completa.
Nota che questo vale solo per l'implementazione GNU.
Per chiarire: se a è una directory contenente d e e e b è un file, l'ordine sarà
- crea c/c
- copia a/d -> c/a/d
- copia a/e -> c/a/e
- cancella a/d
- cancella a/e
- elimina un
- copia b -> c/b
- cancella b
Sposti una directory, interrompi lo spostamento e la directory originale rimarrà intatta:
$ mv a b/
Se sposti più directory, ognuna sarà intatta sull'origine o sulla destinazione, a seconda di quando hai interrotto:
$ mv a b c/
Come ho ottenuto la mia risposta:
$ 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.
Come test, ho copiato una cartella di grandi dimensioni in una directory NFS, interrotta, e il numero di file nella mia cartella di origine di grandi dimensioni è rimasto lo stesso e il contenuto parziale è stato lasciato nella directory NFS. Ho usato "find . -type f | wc -l" per verificare.
Sembra che la risposta di Simon sia corretta.