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