Probleme mit dem Befehl „Konvertieren“, wenn im Ziel Unterverzeichnisse fehlen

Probleme mit dem Befehl „Konvertieren“, wenn im Ziel Unterverzeichnisse fehlen

Ich habe ein Verzeichnis namens „ srcfull“ mit Unterverzeichnissen und anderen Bildern. Ich habe versucht, sie alle mithilfe einer Bash-Anweisung automatisch in ein anderes Zielverzeichnis mit thumbfolgendem Namen zu verschieben:

find ./src -type f -follow -iname '*.jp*g' -exec convert -resize 150x150x "{}" "./thumb/${size}/{}" \;

Dies hat nicht funktioniert, da das thumbVerzeichnis zunächst leer ist und nicht die gleiche Verzeichnisstruktur wie aufweist src.

Ich habe versucht, das nachzuschlagen, man convertkann aber die Option zum automatischen Erstellen der Verzeichnisse nicht finden convert. Wie kann ich alle meine Bilder im Verzeichnis effektiv in eine Miniaturbildgröße konvertieren thumb? Muss ich alle Unterverzeichnisse in Miniaturbild vorab erstellen?


BEARBEITEN

Dem obigen Befehl habe ich Folgendes vorangestellt:

find ./src -type d -follow -exec mkdir -p "thumb/${size}/{}" \;

Aber ich frage mich, ob ich alles mit einem Befehl statt mit zweien erledigen könnte?

Antwort1

Die UNIX-Philosophie besteht darin, Befehle zu haben, die nur eine Sache tun. Befehle, die in eine Datei schreiben können, anstattstdoutdehnen diese Regel bereits aus.

Ob Sie alles mit einem Befehl erledigen können, hängt von Ihrer Definition ab. Dies funktioniert:

find ./src -type f -follow -iname '*.jp*g' -exec /bin/sh -c \
'mkdir -p `dirname "thumb/'${size}'/{}"` &&'\
'convert -resize 150x150x "{}" "./thumb/'${size}'/{}' \;

als ein Befehl oder mehrere zählen: find, sh, mkdir, dirname, convert? Die Zeilenumbrüche dienen nur zur„Lesbarkeit“.

verwandte Informationen