Lösung 1:
Beginnen wir mit der Aussage, dass mv
ist nicht immer atomar.
Lassen Sie uns auch feststellen, dass sich die Atomarität auf den Dateiinhalt bezieht, nicht auf den Dateinamen.
Für jede einzelne Datei wird das Verschieben oder Umbenennen von mv
durchgeführt ist atomar, vorausgesetzt, dass die Datei innerhalb desselben Dateisystems verschoben wird. Die Atomarität garantiert nicht, dass sich die Datei nur an der einen oder anderen Stelle befindet; es ist durchaus möglich, dass die Datei "kurzzeitig" an beiden Stellen gleichzeitig im Dateisystem vorhanden ist. Was Atomity garantiert, wenn es angeboten wird, ist, dass der Dateiinhalt sofort vollständig und nicht teilweise verfügbar ist. Das können Sie sich vorstellen mv
hätte in solchen Situationen mit ln
implementiert werden können gefolgt von rm
.
mv
ist definitiv nicht atomar, wenn die Verschiebung von einem Dateisystem zu einem anderen erfolgt oder wenn ein entferntes Dateisystem den mv
nicht implementieren kann Betrieb vor Ort. In diesen Fällen mv
könnte man sagen, dass es durch das Äquivalent von cp
implementiert wird gefolgt von rm
.
Kommen wir nun zur Frage der Atomarität über mehrere Dateien hinweg. mv
ist bestenfalls nur pro Datei atomar. Wenn Sie also mehrere Dateien zusammen verschieben müssen, ist die Implementierung so, dass sie einzeln verschoben werden. Wenn Sie möchten, mv file1 dir; mv file2 dir; mv file3 dir
.
Wenn Sie wirklich eine Gruppe von Dateien benötigen, die gleichzeitig an einem Zielort erscheinen sollen, ziehen Sie in Betracht, sie in ein Verzeichnis zu legen und dieses Verzeichnis zu verschieben. Dieses einzelne Objekt (das Verzeichnis) kann atomar verschoben werden.
Lösung 2:
Nr. mv dir1/*
ist dasselbe wie mv dir1/file1 && mv dir1/file2 && mv dir1/fileN
. Jeder einzelne Zug ist atomar, aber nicht der vollständige Satz.