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 -print0mitxargs -0ermöglicht es Ihnen, Leerzeichen in den Namen zu verwenden.xargs -rwirdmvnicht ausführen es sei denn, es muss etwas bewegt werden. (mvwird sich beschweren, wenn keine Quelldateien angegeben werden).- Die Syntax
mv -termöglicht es Ihnen, zuerst das Ziel und dann die Quelldateien anzugeben, die vonxargsbenö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.