Řešení 1:
Začněme prohlášením, že mv
není vždy atomární.
Identifikujme také, že atomicita odkazuje na obsah souboru, nikoli na název souboru.
U každého jednotlivého souboru přesun nebo přejmenování provede mv
je atomický za předpokladu, že je soubor přesouván v rámci stejného souborového systému. Atomicita nezaručuje, že soubor je pouze na jednom nebo druhém místě; je docela možné, že soubor by mohl být přítomen v souborovém systému na obou místech současně "krátkou dobu". Co atomicita zaručuje, když je nabízena, je, že obsah souboru je okamžitě k dispozici zcela a ne částečně. Můžete si představit, že mv
v takových situacích mohl být implementován pomocí ln
následuje rm
.
mv
rozhodně není atomický, když přesun, který provádí, je z jednoho souborového systému do druhého, nebo když vzdálený souborový systém nemůže implementovat mv
provoz lokálně. V těchto případech mv
dalo by se říci, že je implementován ekvivalentem cp
následuje rm
.
Nyní přejdeme k otázce atomicity ve více souborech. mv
je v nejlepším případě atomický pouze na soubor, takže pokud máte několik souborů k přesunutí dohromady, implementace je taková, že se budou přesouvat jeden po druhém. Pokud chcete, mv file1 dir; mv file2 dir; mv file3 dir
.
Pokud opravdu potřebujete, aby se v cílovém umístění objevila skupina souborů současně, zvažte jejich umístění do adresáře a přesunutí tohoto adresáře. Tento jediný objekt (adresář) lze přesunout atomicky.
Řešení 2:
č. mv dir1/*
je stejný jako mv dir1/file1 && mv dir1/file2 && mv dir1/fileN
. Každý jednotlivý pohyb je atomický, ale ne celá sada.