rsync
wäre eine schlechte Wahl, da es viel Client/Server-Hintergrundarbeit leistet, die sowohl lokale als auch entfernte Systeme berücksichtigt.
mv
ist wahrscheinlich die beste Wahl. Wenn möglich, sollten Sie es mit mv directory_old directory_new
versuchen statt mv directory_old/* directory_new/
. Auf diese Weise bewegen Sie eine Sache statt einer Million Dinge.
find src_image_dir/ -type f -name '*.jpg' -print0 | xargs -0r mv -t dst_image_dir/
- Dadurch wird die Argumenterweiterung nicht überlaufen.
- Sie können die Dateierweiterung angeben, wenn Sie möchten. (-name ...)
find -print0
mitxargs -0
ermöglicht es Ihnen, Leerzeichen in den Namen zu verwenden.xargs -r
wirdmv
nicht ausführen es sei denn, es muss etwas bewegt werden. (mv
wird sich beschweren, wenn keine Quelldateien angegeben werden).- Die Syntax
mv -t
ermöglicht es Ihnen, zuerst das Ziel und dann die Quelldateien anzugeben, die vonxargs
benötigt werden . - Das Verschieben des gesamten Verzeichnisses ist natürlich viel schneller, da es unabhängig von der Anzahl der darin enthaltenen Dateien in konstanter Zeit erfolgt, aber:
- das Quellverzeichnis verschwindet für einen Bruchteil der Zeit und es könnte Ihnen Probleme bereiten;
- Wenn der Prozess das aktuelle Verzeichnis als Ausgabeverzeichnis verwendet (im Gegensatz dazu, immer auf einen vollständigen Pfad von einem nicht beweglichen Ort zu verweisen), müssten Sie ihn neu starten. (wie bei der Protokollrotation ).
Übrigens würde ich mich fragen, ob ich wirklich so viele Dateien auf einmal verschieben muss. Stapelverarbeitung wird überbewertet. Ich versuche, keine Unmengen an Arbeit anzusammeln, wenn ich die Dinge in dem Moment verarbeiten kann, in dem sie generiert werden.
Wenn sich die beiden Verzeichnisse auf demselben Dateisystem befinden, verwenden Sie mv
auf das DIRECTORY und nicht auf den Inhalt des Verzeichnisses.
Wenn sie sich auf zwei verschiedenen Dateisystemen befinden, verwenden Sie rsync:
rsync -av /source/directory/ /destination
Beachten Sie den abschließenden /
auf der Quelle. Dies bedeutet, dass der Inhalt des Verzeichnisses und nicht das Verzeichnis selbst kopiert wird. Wenn Sie die /
verlassen ausgeschaltet, werden die Dateien trotzdem kopiert, aber sie befinden sich in einem Verzeichnis namens /destination/directory
. Mit dem / befinden sich die Dateien nur in /destination
rsync
behält den Dateibesitz, wenn Sie es als root ausführen oder wenn die Dateien Ihnen gehören. Es wird auch mtime
beibehalten jeder einzelnen Datei.