Bilder resize inkls. Verzeichnisstruktur
Hallo, ich steh hier vor folgenden, allerdings nicht OSS spezifischen, Problemen. Ich habe zb. folgende Verzeichnisstruktur in der Bilder liegen. Diese möchte ich nun mittels convert verkleinern (Die alten Bilder sollen erhalten bleiben). /home/Test.User/Pictures/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer. Grundsätzlich funktioniert das mittels "find . -iname "*.jpg" -type f -execdir /usr/bin/convert -resize 2000x1500 {} {}_2000.jpg \;" Problem 1. Wenn der Orignaldateiname lautet 12345.JPG dann heißt das File hinterher halt 12345.JPG_2000.jpg. Ok, kann ich damit leben das "jpg" zweimal drin vorkommt. Ist halt nicht "schön". Problem 2, das größere. Wie erreiche ich das die alte Verzeichnisstruktur "dupliziert" und in ein neues Verzeichnis als Startordner verwendet wird. Also sollte das hinterher so aussehen und alle konvertieren Files dort abgelegt werden. /home/Test.User/Pictures/small/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer. Any suggestions? Cu Achim -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Wed, 16 Mar 2011 21:45:54 +0100
schrieb Achim Theobald
Hallo,
ich steh hier vor folgenden, allerdings nicht OSS spezifischen, Problemen.
Ich habe zb. folgende Verzeichnisstruktur in der Bilder liegen. Diese möchte ich nun mittels convert verkleinern (Die alten Bilder sollen erhalten bleiben).
/home/Test.User/Pictures/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer.
Grundsätzlich funktioniert das mittels "find . -iname "*.jpg" -type f -execdir /usr/bin/convert -resize 2000x1500 {} {}_2000.jpg \;"
Problem 1. Wenn der Orignaldateiname lautet 12345.JPG dann heißt das File hinterher halt 12345.JPG_2000.jpg. Ok, kann ich damit leben das "jpg" zweimal drin vorkommt. Ist halt nicht "schön".
Problem 2, das größere. Wie erreiche ich das die alte Verzeichnisstruktur "dupliziert" und in ein neues Verzeichnis als Startordner verwendet wird. Also sollte das hinterher so aussehen und alle konvertieren Files dort abgelegt werden.
/home/Test.User/Pictures/small/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer.
Any suggestions?
man convert(1) convert options input-file output-file wobei output-file auch zusätzlich durch ein Verzeichnis definiert werden kann z.B. mkdir -p Pictures/small cd Pictures convert <options> altes.jpg small/neues.jpg -Dieter -- Dieter Klünter | Systemberatung http://dkluenter.de GPG Key ID:DA147B05 53°37'09,95"N 10°08'02,42"E -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Mittwoch, 16. März 2011 schrieb Achim Theobald:
(...). Problem 2, das größere. Wie erreiche ich das die alte Verzeichnisstruktur "dupliziert" und in ein neues Verzeichnis als Startordner verwendet wird. (...).
Falls ich das richtig verstehe, würde ich einen ganz anderen Ansatz wählen. Dazu lasse ich mal das Ändern der Endung außer Betracht. Die Idee ist, "cp - a" die Verzeichnisstruktur erzeugen zu lassen und dann in diesen neuen Verzeichnissen die Bilder-Kopien mit "mogrify" direkt zu ändern anstatt von "convert" neue Dateien anlegen zu lassen. # cd /home/Test.User/Pictures/ # mkdir small # cp -a Bilder_1 Bilder_2 Bilder_3 small/ # cd small/ # find . -iname "*.jpg" -type f -print0 | xargs -0 mogrify -resize 2000x1500 Getestet habe ich es übrigens gar nicht! Gruß Jan -- When all else fails, read the instructions. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Achim! On Mi, 16 Mär 2011, Achim Theobald wrote:
ich steh hier vor folgenden, allerdings nicht OSS spezifischen, Problemen.
Ich habe zb. folgende Verzeichnisstruktur in der Bilder liegen. Diese möchte ich nun mittels convert verkleinern (Die alten Bilder sollen erhalten bleiben).
/home/Test.User/Pictures/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer.
Grundsätzlich funktioniert das mittels "find . -iname "*.jpg" -type f -execdir /usr/bin/convert -resize 2000x1500 {} {}_2000.jpg \;"
Problem 1. Wenn der Orignaldateiname lautet 12345.JPG dann heißt das File hinterher halt 12345.JPG_2000.jpg. Ok, kann ich damit leben das "jpg" zweimal drin vorkommt. Ist halt nicht "schön".
Problem 2, das größere. Wie erreiche ich das die alte Verzeichnisstruktur "dupliziert" und in ein neues Verzeichnis als Startordner verwendet wird. Also sollte das hinterher so aussehen und alle konvertieren Files dort abgelegt werden.
/home/Test.User/Pictures/small/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer.
Any suggestions?
ungetestet: ~$ export newpath="/tmp" ~$ find /mnt/ -type f -name "*.jpg" -exec sh -c ' for i; do a="$newpath${i%/*}"; b="${i##*/}" b="${b%%.*}" test -d "$a" || mkdir -p "$a"; convert -resize 2000x1500 "$i" "$a/$b.jpg"; done' sh {} + wichtig ist nur, dass die Pfadangabe für find absolut ist. Sonst klappt die Parameter-Expansion nicht hin und es wird Fehler geben. Mit freundlichen Grüßen Christian -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On 03/16/2011 10:56 PM, Christian Brabandt wrote:
Hi Achim!
On Mi, 16 Mär 2011, Achim Theobald wrote:
ich steh hier vor folgenden, allerdings nicht OSS spezifischen, Problemen.
Ich habe zb. folgende Verzeichnisstruktur in der Bilder liegen. Diese möchte ich nun mittels convert verkleinern (Die alten Bilder sollen erhalten bleiben).
/home/Test.User/Pictures/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer.
Grundsätzlich funktioniert das mittels "find . -iname "*.jpg" -type f -execdir /usr/bin/convert -resize 2000x1500 {} {}_2000.jpg \;"
Problem 1. Wenn der Orignaldateiname lautet 12345.JPG dann heißt das File hinterher halt 12345.JPG_2000.jpg. Ok, kann ich damit leben das "jpg" zweimal drin vorkommt. Ist halt nicht "schön".
Problem 2, das größere. Wie erreiche ich das die alte Verzeichnisstruktur "dupliziert" und in ein neues Verzeichnis als Startordner verwendet wird. Also sollte das hinterher so aussehen und alle konvertieren Files dort abgelegt werden.
/home/Test.User/Pictures/small/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer.
Any suggestions?
ungetestet:
~$ export newpath="/tmp" ~$ find /mnt/ -type f -name "*.jpg" -exec sh -c ' for i; do a="$newpath${i%/*}"; b="${i##*/}" b="${b%%.*}" test -d "$a" || mkdir -p "$a"; convert -resize 2000x1500 "$i" "$a/$b.jpg"; done' sh {} +
wichtig ist nur, dass die Pfadangabe für find absolut ist. Sonst klappt die Parameter-Expansion nicht hin und es wird Fehler geben.
Mit freundlichen Grüßen Christian
Hallo Christian, Ich Danke Dir! Das ist ein sehr schöner Denkansatz für mich gewesen. Auf die Idee die bash mittels -exec aufzurufeb und dann darin alles zu machen, wäre ich nie gekommen. Cu Achim -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Achim! On Do, 17 Mär 2011, Achim Theobald wrote:
On 03/16/2011 10:56 PM, Christian Brabandt wrote:
Hi Achim!
On Mi, 16 Mär 2011, Achim Theobald wrote:
ich steh hier vor folgenden, allerdings nicht OSS spezifischen, Problemen.
Ich habe zb. folgende Verzeichnisstruktur in der Bilder liegen. Diese möchte ich nun mittels convert verkleinern (Die alten Bilder sollen erhalten bleiben).
/home/Test.User/Pictures/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer.
Grundsätzlich funktioniert das mittels "find . -iname "*.jpg" -type f -execdir /usr/bin/convert -resize 2000x1500 {} {}_2000.jpg \;"
Problem 1. Wenn der Orignaldateiname lautet 12345.JPG dann heißt das File hinterher halt 12345.JPG_2000.jpg. Ok, kann ich damit leben das "jpg" zweimal drin vorkommt. Ist halt nicht "schön".
Problem 2, das größere. Wie erreiche ich das die alte Verzeichnisstruktur "dupliziert" und in ein neues Verzeichnis als Startordner verwendet wird. Also sollte das hinterher so aussehen und alle konvertieren Files dort abgelegt werden.
/home/Test.User/Pictures/small/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer.
Any suggestions?
ungetestet:
~$ export newpath="/tmp" ~$ find /mnt/ -type f -name "*.jpg" -exec sh -c ' for i; do a="$newpath${i%/*}"; b="${i##*/}" b="${b%%.*}" test -d "$a" || mkdir -p "$a"; convert -resize 2000x1500 "$i" "$a/$b.jpg"; done' sh {} +
wichtig ist nur, dass die Pfadangabe für find absolut ist. Sonst klappt die Parameter-Expansion nicht hin und es wird Fehler geben.
Mit freundlichen Grüßen Christian
Hallo Christian,
Ich Danke Dir!
Das ist ein sehr schöner Denkansatz für mich gewesen. Auf die Idee die bash mittels -exec aufzurufeb und dann darin alles zu machen, wäre ich nie gekommen.
Kein Problem. Wenn man weiß wie, geht mit find fast alles und sogar portabel. Das Quoting wird nur gelegentlich eklig. Ansonsten empfinde solche Aufgaben immer als schöne Übung. Mit freundlichen Grüßen Christian -- -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On 03/17/2011 07:22 PM, Christian Brabandt wrote:
Hi Achim!
On Do, 17 Mär 2011, Achim Theobald wrote:
On 03/16/2011 10:56 PM, Christian Brabandt wrote:
Hi Achim!
On Mi, 16 Mär 2011, Achim Theobald wrote:
ich steh hier vor folgenden, allerdings nicht OSS spezifischen, Problemen.
Ich habe zb. folgende Verzeichnisstruktur in der Bilder liegen. Diese möchte ich nun mittels convert verkleinern (Die alten Bilder sollen erhalten bleiben).
/home/Test.User/Pictures/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer.
Grundsätzlich funktioniert das mittels "find . -iname "*.jpg" -type f -execdir /usr/bin/convert -resize 2000x1500 {} {}_2000.jpg \;"
Problem 1. Wenn der Orignaldateiname lautet 12345.JPG dann heißt das File hinterher halt 12345.JPG_2000.jpg. Ok, kann ich damit leben das "jpg" zweimal drin vorkommt. Ist halt nicht "schön".
Problem 2, das größere. Wie erreiche ich das die alte Verzeichnisstruktur "dupliziert" und in ein neues Verzeichnis als Startordner verwendet wird. Also sollte das hinterher so aussehen und alle konvertieren Files dort abgelegt werden.
/home/Test.User/Pictures/small/Bilder_1 |- Bilder_2 |- Bilder_3/und_noch_tiefer.
Any suggestions?
ungetestet:
~$ export newpath="/tmp" ~$ find /mnt/ -type f -name "*.jpg" -exec sh -c ' for i; do a="$newpath${i%/*}"; b="${i##*/}" b="${b%%.*}" test -d "$a" || mkdir -p "$a"; convert -resize 2000x1500 "$i" "$a/$b.jpg"; done' sh {} +
wichtig ist nur, dass die Pfadangabe für find absolut ist. Sonst klappt die Parameter-Expansion nicht hin und es wird Fehler geben.
Mit freundlichen Grüßen Christian
Hallo Christian,
Ich Danke Dir!
Das ist ein sehr schöner Denkansatz für mich gewesen. Auf die Idee die bash mittels -exec aufzurufeb und dann darin alles zu machen, wäre ich nie gekommen.
Kein Problem. Wenn man weiß wie, geht mit find fast alles und sogar portabel. Das Quoting wird nur gelegentlich eklig. Ansonsten empfinde solche Aufgaben immer als schöne Übung.
Mit freundlichen Grüßen Christian
Hallo, anbei mein "Ergebnis".... Lässt sich garantiert noch verfeinern und erweitern.... Hier macht es sich gerade an > 44000 Bilder mit ca. 250GB zu schaffen. Und dann wandert das Zeug auf den DLNA Server. #!/bin/sh # export size='2000x1500' export inputpath='/home/Achim.Theobald/Pictures/' export newpath='/mnt/crypt0/Pictures/'$size # /bin/find $inputpath -type f -iname "*.jpg" -exec sh -c ' for i; do a="$newpath${i%/*}"; b="${i##*/}"; b="${b%%.*}"; test -d "$a" || mkdir -p "$a"; if [ ! -f "$a/$b.jpg" ] ; then # Existiert die zu erstellende Datei noch nicht, dann mach mal... /bin/echo Erstelle ein Duplikat von $i mit der Aufloesung $size als "$a/$b.jpg"; /usr/bin/convert -resize $size "$i" "$a/$b.jpg"; # Resize auf Groesse: $size /bin/touch --reference="$i" "$a/$b.jpg"; # Ubernehme Dateidatum und Uhrzeit der Ursprungsdatei fi; done' sh {} + # exit ### Cu Achim -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (4)
-
Achim Theobald
-
Christian Brabandt
-
Dieter Kluenter
-
Jan Ritzerfeld