Ich versuche, die Größe aller Dateien zu ändern, die mit einem FIND-Befehl gefunden wurden (dies sind alle Dateien in einem Verzeichnis und seinen Unterverzeichnissen). Ich habe viele Optionen ausprobiert, bin aber jedes Mal auf verschiedene Fehler gestoßen. Dies ist mein letzter Versuch:
find /my/folder/ -name '*jpg' -exec 'mogrify -resize 900">"{}' \;
Ich habe viele andere ausprobiert, aber ohne Erfolg. Was geht schief
mogrify -resize 900">" foo.jpg
?Antworten:
Ich mag Exec on Find nicht sehr, es ist ein bisschen alt und unvorhersehbar, besonders wenn man alle Zitate füttert :)
Versuchen Sie es mit xargs, es sollte sich etwas zivilisierter verhalten
find /my/folder/ -name '*jpg' -print0 | xargs -0 -J% "mogrify -resize 900 > %"
Dinge, die hier anders sind
-print0 on find fügt nach jedem Dateinamen ein NULL-Zeichen als Trennzeichen hinzu
in xargs
-0 gibt an, dass die Eingabe durch NULL getrennt ist. Char -J% gibt an, dass% durch den Inhalt der Eingabe ersetzt werden soll (in diesem Fall Dateiname).
quelle
xargs -0 -I% mogrify -resize 900">" %
@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:
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.
quelle
Bearbeiten: Entschuldigung, ich habe gerade festgestellt, dass dies keine Umleitung in Ihrem Befehl ist. Es ist eine besondere Anweisung an
mogrify
.Ich würde die einfachen Anführungszeichen weglassen und Folgendes versuchen:
Wenn Sie den Befehl so verwenden, wie Sie ihn veröffentlicht haben, erhalten Sie wahrscheinlich folgende Fehlermeldungen:
Ursprüngliche Antwort:
Damit die Umleitung in
-exec
Ihnen funktioniert , müssen Sie Folgendes verwendensh -c
:Erst in den letzten Tagen habe ich angefangen, Leute zu sehen, die die Verwendung in Frage stellen
-exec
. Ich habe niemanden speziell sagen sehen, was daran falsch ist. Ich habe viel Erfahrung damit und es hat mich nie enttäuscht. Es gibt jedoch Zeiten, diexargs
aufgrund der Kontrolle und der Fähigkeit, mehrere Argumente gleichzeitig zu übergeben , definitiv vorteilhaft sind. Wenn Sie jedoch verwenden-I
, wird jeweils nur ein Argument übergeben. Der hier gezeigte Befehl hat den Nachteil, dass die Shell für jede gefundene Datei aufgerufen wird.quelle
Es ist alt hier, aber niemand sagte etwas über ein einfaches:
-good
Fügen Sie auch alle Dateien im aktuellen Verzeichnis für eine benutzerdefinierte Thunar-Aktion hinzu-quality xx
.Oder für benutzerdefinierte Aktionen nur für ausgewählte Dateien:
quelle