jobo: linux-shellskript zur thumbnailserzeugung mit imagemagick

Hallo,

in einem Ordner lungern in Originalgröße jgps. Die sollen in zwei Größen konvertiert werden. Mit Windows habe ich da schon mal ein Skript mit Hilfe von Vinzenz zusammengeschustert.

Allein die Konvertierung würde sich ja im Netz noch an Beispielen finden lassen. Ich möchte aber per cron-Job (evtl. unter der Nutzung von "nice" - und auch "daemon"??) in regelmäßigen Abständen schauen, ob in dem Ordner neue Fotos sind, von denen nicht schon ein thumb (in einem anderen Ordner wohl am Besten) erstellt wurde.

Mit php würde ich wohl foreach(scandir()) { } mit if(!file_exists()) benutzen. Unter WinXP heißt das for %%i in *.jpg ....

Frage eins: wie durchlaufe ich mit Linux die Dateien eines Verzeichnisses.
Frage zwei:  gibt es eine bessere Lösung, als mit ls und grep zu schauen, ob die aktuelle abgefragte Datei schon als thumb-<Dateiname>.jpg in einem anderen Verzeichnis (../thumbs/) existiert?

Dank und Gruß

jobo

  1. Hallo,

    in einem Ordner lungern in Originalgröße jgps. Die sollen in zwei Größen konvertiert werden.
    Allein die Konvertierung würde sich ja im Netz noch an Beispielen finden lassen. Ich möchte aber per cron-Job (evtl. unter der Nutzung von "nice" - und auch "daemon"??) in regelmäßigen Abständen schauen, ob in dem Ordner neue Fotos sind, von denen nicht schon ein thumb (in einem anderen Ordner wohl am Besten) erstellt wurde.

    Du könntest Inotify verwenden, wenn möglich.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      Du könntest Inotify verwenden, wenn möglich.

      Weiß nicht, ob ein Webpack-Pro von Hosteurope das hergibt. Das Skript in dem Thread schaut wohl einfach in bestimmten Zeitabständen, ob in dem Verzeichnis eine neue Datei angelangt ist, und wenn ja, kann man dann "was" machen. Da geht man dann davon aus, dass wenn es keine neue gibt, nix zu machen ist, weil es schon gemacht wurde (convert thumbnail) und wenn es eine neue gibt, eben das zu tun wäre (convert thumbnail). das würde man dann starten, wenn man absehen kann, das in dem verzeichnis sich bald was tun wird und den prozess dann stoppen (via killall oder was auch immer) wenn man weiß, dass sich nichts mehr in dem verzeichnis tun wird, oder?

      Gruß

      jobo

  2. Hi,

    Frage eins: wie durchlaufe ich mit Linux die Dateien eines Verzeichnisses.

    Ich habe hier ein kleines ksh-Script, mit dem ich Bilder umbenenne:

    for i in *.jpg  
    do  
       ctr=$((ctr+1));  
       name="PRAEFIX$ctr.jpg";  
       mv $i $name;  
    done
    

    Damit wird ein Verzeichnis Durchlaufen und die Bilder werden umbenannt.

    Frage zwei:  gibt es eine bessere Lösung, als mit ls und grep zu schauen, ob die aktuelle abgefragte Datei schon als thumb-<Dateiname>.jpg in einem anderen Verzeichnis (../thumbs/) existiert?

    if [ -e name.jpg ]  
    then  
    echo "Datei existiert"  
    else  
    echo "Datei existiert nicht"  
    fi
    

    Hier eine Datei-Tests, die du statt "-e" verwenden kannst. Aber in deinem Beispiel sollte das -e eigentlich schon passen.

    mfG,
    steckl

    1. Hallo,

      so schaut das Ding jetzt aus:

      cd bilder
      for i in *.jpg
      do
              if [ -e ../thumbs/thumb-$i ]
              then
                      echo "Datei $i existiert als thumb"
              else
                      echo "Datei existiert nicht als thumb"
                      convert -thumbnail 200 $i ../thumbs/thumb-$i
                      echo "gethumbed von bilder/$i nach /thumbs/thumb$i"
              fi
      done

      Gruß

      jobo

      1. Hallo,

        Bilder könnten ja auch *.JPG heißen.

        wie krieg ich denn for i in *.jpg|*.JPG hin?
                                         ^
                                  soll ein "oder" werden

        Gruß

        jobo

        1. Tach,

          Bilder könnten ja auch *.JPG heißen.

          oder JPEG oder Jpg ...

          wie krieg ich denn for i in *.jpg|*.JPG hin?

          ich schätze mal mit find wirst du mehr Erfolg haben als mit Arrays in der Bash.

          mfg
          Woodfighter