Soluzione 1:
Iniziamo con l'affermazione che mv
non è sempre atomico.
Identifichiamo anche che l'atomicità si riferisce al contenuto del file, non al nome del file.
Per ogni singolo file, lo spostamento o la ridenominazione eseguita da mv
è atomico a condizione che il file venga spostato all'interno dello stesso filesystem. L'atomicità non garantisce che il file sia solo in un posto o nell'altro; è del tutto possibile che il file possa essere presente nel filesystem in entrambi i posti contemporaneamente per "un breve periodo". Ciò che l'atomicità garantisce, quando offerto, è che i contenuti del file siano istantaneamente disponibili in modo completo e non parziale. Puoi immaginare quel mv
in tali situazioni avrebbe potuto essere implementato con ln
seguito da rm
.
mv
non è sicuramente atomico quando lo spostamento che esegue è da un filesystem a un altro, o quando un filesystem remoto non può implementare il mv
operazione in locale. In questi casi mv
si potrebbe dire che sia implementato dall'equivalente di un cp
seguito da rm
.
Passiamo ora alla questione dell'atomicità su più file. mv
è nella migliore delle ipotesi atomico solo per file, quindi se hai un numero di file da spostare insieme, l'implementazione è tale che verranno spostati uno alla volta. Se vuoi, mv file1 dir; mv file2 dir; mv file3 dir
.
Se hai davvero bisogno che un gruppo di file appaia contemporaneamente in una destinazione, considera di inserirli in una directory e di spostare quella directory. Questo singolo oggetto (la directory) può essere spostato atomicamente.
Soluzione 2:
No. mv dir1/*
è uguale a mv dir1/file1 && mv dir1/file2 && mv dir1/fileN
. Ogni singola mossa è atomica, ma non il set completo.