GNU/Linux >> Znalost Linux >  >> Linux

Co se stane, když je mv přerušeno?

Pokud přesunete adresář ve stejném systému souborů, pouze přesunete položku adresáře z jednoho umístění v systému souborů do jiného. Např. mv /source/dir /target/dir smaže záznam v adresáři dir od /source a vytvořte nový v /target . To se provádí jedním voláním atomového systému (tj. nepřerušitelným). Inode obsahující položky adresáře dir stejně jako skutečný obsah samotného adresáře není ovlivněn.

Pokud přesunete adresář z jednoho systému souborů do druhého, všechny soubory jsou nejprve zkopírovány do nového systému souborů a poté odpojeny od původního systému. Pokud tedy přerušíte mv během kopírování můžete skončit se dvěma kopiemi některých souborů – ve starém umístění a v novém.


Implementace GNU iteruje přes argumenty na příkazovém řádku, nejprve se pokusí přejmenovat, a pokud se to nezdaří, rekurzivně zkopíruje a poté rekurzivně odstraní zdroj. Takže

mv a b c/

smaže a před zkopírováním b a nezačne nic mazat v a před dokončením cílové kopie.

Všimněte si, že to platí pouze pro implementaci GNU.

Pro upřesnění: pokud a je adresář obsahující d a e a b je soubor, pořadí bude

  • vytvořit c/a
  • kopírovat a/d -> c/a/d
  • kopírovat a/e -> c/a/e
  • smazat a/d
  • smazat a/e
  • smazat
  • kopírovat b -> c/b
  • smazat b

Přesunete jeden adresář, přerušíte přesun a původní adresář zůstane nedotčen:

$ mv a b/

Pokud přesunete více adresářů, každý z nich zůstane nedotčen buď ve zdroji, nebo v cíli, v závislosti na tom, kdy jste přerušili:

$ mv a b c/

Jak jsem dostal odpověď:

$ 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.

Jako test jsem zkopíroval velkou složku do adresáře NFS, přerušil se a počet souborů v mé zdrojové velké složce zůstal stejný a částečný obsah zůstal v adresáři NFS. K ověření jsem použil "find . -type f | wc -l".

Zdá se, že Simonova odpověď je správná.


Linux
  1. K čemu jsou Inody dobré?

  2. Jak přejít o jeden adresář dolů?

  3. Co vrátí příkaz Ls -al .*?

  1. Co se stane, když zakážu a odinstaluji Plymouth?

  2. Co je dvojitá tečka (..) a jedna tečka (.) v Linuxu?

  3. Co se stane, když se vlákno rozvětvuje?

  1. Jaký je nejrychlejší způsob, jak v Linuxu přesunout milion obrázků z jednoho adresáře do druhého?

  2. Co je výstupem pwd?

  3. Co se stane, když smažete soubor zařízení?