@lynxman hat den traditionellen Rat von find / xargs übernommen. Eine andere Alternative ist jedoch die Verwendung von find mit gnu parallel . Parallel bietet einige nette Verbesserungen für xargs, wie eine ausgefeiltere Argumentbehandlung und die Möglichkeit, viele Jobs parallel auszuführen (mir ist klar, dass einige neuere Versionen von xargs auch parallele Jobs unterstützen).
Mal sehen, ob wir dies parallel umschreiben können. Wie wäre es mit:
find /my/folder -name '*jpg' -print0 | parallel --progress -0 -j +0 "mogrify -resize 900\> {}"
Dadurch werden alle JPEG-Dateien gefunden und parallel ausgeführt. parallel führt so viele Jobs parallel aus, wie Sie über CPU-Kerne verfügen ( -j +0
).
Wenn Sie viele Dateien verarbeiten, können Sie durch intelligentes Stapeln der Jobs auf diese Weise erhebliche Zeiteinsparungen erzielen. Die --progress
Option zeigt einige Details an, während der Job ausgeführt wird.
Der -print0
Befehl from the find verwendet Nullen, um die Ausgabe zu trennen, falls Ihre Dateinamen Leerzeichen oder seltsame Zeichen enthalten. Die -0
Option zum parallelen Erwarten erwartet eine durch Nullen getrennte Eingabe. Wenn Sie sicher sind, dass Ihre Eingabedateinamen keine Leerzeichen enthalten, können Sie diese weglassen -print0 / -0
. Beachten Sie, dass die meisten Versionen von xargs auch die -0
Option verwenden, sodass Sie diesen Trick sowohl mit xargs als auch mit parallel verwenden können.
EDIT: Aus Kommentaren habe ich die Befehle nicht ganz richtig verstanden. Mogrify wurde jetzt angepasst, da ich tatsächlich versucht habe, es zu verwenden. Sie müssen nicht in neuen Dateien speichern, da mogrify standardmäßig in die vorhandene Datei schreibt.
mogrify -resize 900">" foo.jpg
?