GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa succede se mv viene interrotto?

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.


Linux
  1. Filtro Rsync:copiare un solo pattern?

  2. A cosa servono gli inode?

  3. Come spostarsi verso il basso di una directory?

  4. Che cosa restituisce il comando Ls -al .*?

  5. Cosa succede se disattivo e disinstallo Plymouth?

Cosa sono i microservizi? Introduzione all'architettura dei microservizi

Qual è il modo più veloce per spostare un milione di immagini da una directory all'altra in Linux?

SCP - non una directory - Cosa sto facendo di sbagliato?

Cosa si intende per montaggio di un dispositivo in Linux?

Possiamo montare più dischi come una directory?

Cosa significa il suffisso .d in Linux?