GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der schnellste Weg, um unter Linux eine Million Bilder von einem Verzeichnis in ein anderes zu verschieben?

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 mit xargs -0 ermöglicht es Ihnen, Leerzeichen in den Namen zu verwenden.
  • xargs -r wird mv 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 von xargs 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.


Linux
  1. Wie kopiert man die Top 10 der neuesten Dateien von einem Verzeichnis in ein anderes?

  2. Was ist der richtige Weg, um jdk unter Linux zu installieren?

  3. Gibt es eine einfache Möglichkeit, ein logisches Volume von einer Volume-Gruppe in eine andere zu verschieben/kopieren? (LVM2)

  4. Was sollten die idealen Home-Verzeichnisberechtigungen in Linux sein?

  5. Was bedeutet das Suffix .d unter Linux?

Wie verschiebt man alle Dateien (einschließlich versteckter) von einem Verzeichnis in ein anderes?

Wie kopiert man eine Datei aus einem anderen Verzeichnis in das aktuelle?

Linux – Wie überprüft man die Verzeichnisstrukturinformationen einer Unix/Linux-Datei?

Der schnellste Weg, ein Iso zu extrahieren?

Absoluter vs. relativer Pfad in Linux:Was ist der Unterschied?

Was ist der schnellste Weg, um ein Skript auszuführen?