[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bilder-Batch



David Haller schrieb:
Hallo,

Am Mit, 26 Aug 2009, Wolfgang Freitag-Friedl schrieb:
[...]
Ich dachte, wenn ich
* die Ordnerstruktur dupliziere
* Dateiliste in ein File einlese:
find -name *jpg | cat >> /tmp/test
                  ^^^^^^^^ Weia. Das ist mal ein kreativer "Useless
                  use of cat".

* for i in $(cat < /tmp/test); do convert  -quality 85 -resample 96x96
           ^^^^^^^^^^^^^^^^^^^^

Hier zerbröselt's dir schon. Besser ist bei sowas:

while read file; do
    ...
done < Datei

-resize 1024x768 "$i" "/dev/shm/testuser/$(dirname $i)/$(basename $i)" ;
done;                                              ^^             ^^

und da wieder. Und wieso hier überhaupt dirname/basename?


Äh, weil ich nur Amateur bin und nicht besonders fix bei scripts? :-)

find . -name '*.jpg' -print0 | while read -r -0 file; do
    convert -quality 85 -resample 96x96 -resize 1024x768 \
        "$file" "/dev/shm/testuser/${file%\/*}/${1##*\/}"
done

Diese Variante habe ich ausprobiert (im Quellverzeichnis), meldet aber
bash: read: -0: invalid option
(Ich tippe, dass read diese Option mit dem nullbyte nicht mehr kennt)

Aber durch deine Anregungen (s. auch unteres quote) konnte ich es jetzt folgendermassen (sicher immer noch umständlich*) lösen (/home/metro/PHOTOS_drop ist das Zielverz.)

metro@linux://home/metro/PHOTOS$

metro@linux$ find -type d -exec mkdir -p /home/metro/PHOTOS_drop/{} \;

metro@linux$ find . -name '*.jpg' -printf \%p\\\n |  \
cat > /tmp/test

metro@linux$ cat < /tmp/test | while read -r  file ; \
do convert -quality  85 -resample 96x96 -resize 1024x768 \
"$file"  \
"/home/metro/PHOTOS_drop/$(dirname "$file")/$(basename "$file")" ; done

(Die Variante mit ${file%\/*}/${1##*\/}" hat übrigens nicht geklappt)


Oder wenn mit dirname/basename dann muß "/dev/shm/testuser/$(dirname "$file")/$(basename "$file")"
verwendet werden. Auch "innen" muß unbedingt gequoted werden. Wenn man
Backticks `` statt $() verwendet muß man die inneren "" übrigens auch
noch escapen: "$(basename \"$file\")".

HTH,
-dnh


Perfekt ist das ganz natürlich nicht, aber genau ausreichend.
Luxus wäre noch vielleicht:

? kann ich find auch noch eine Art "oder" mitgeben bzw. etwas, damit auch *jpeg gefunden wird?
find . -name '*.jp[e]g'

Danke nochmals, David!

lg,
--

    ###
   #   #
    # #
  Wolfgang
    # #
   #   #Freitag


* da gibts jetzt sicher zu Recht ein paar "useless use of cat" -Mahnungen ;)


Reply to: