hunderte Bilder bearbeiten...

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von M.tensor, 21.08.2007.

  1. #1 M.tensor, 21.08.2007
    Zuletzt bearbeitet: 21.08.2007
    M.tensor

    M.tensor Grünschnabel

    Dabei seit:
    24.08.2006
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo Unix Gemeinde,

    1.
    ich möchten mit einem Befehl (bzw. Script) Bilder wie folgt verändern.
    Meine Fotos sind in /home/user/Fotos... gespeichert, nun möchte ich alle Fotos, die sich im Ordner UND deren Unterordner befinden mit "convert" auf 800x... verkleinern. Des Weiteren sollen die verkleinerten Fotos in einen neuen Ordner und Unterordner abgelegt werden /home/user/netFotos/.... . Auch die Dateinamen sollen ein 'net' davor bekommen.
    Bsp.:

    /home/user/Fotos/
    ...../Unterordner1
    ...../Unterordner2
    ....................................../Unterordner2.1
    ...../Unterordner3
    usw.

    /home/user/netFotos/
    ....../netUnterordner1
    ....../netUnterordner2
    ............................./netUnterordner2.1
    ....../netUnterordner3


    2.
    Die Ordner /home/user/Fotos... und .../netFotos sollen synchroniesiert werden und ggf. sollen Bilder dann in den netFotos-Ordner convertiert werden.

    Wie kann ich diesen Code erweitern, damit meine Vorstellung erfüllt werden?
    Code:
    #!/bin/bash
    # conv2net
    echo "------Starte Imageoptimierung für das Web-------"
    echo "---Dieser Prozess kann wenige Minuten dauern----"
    for i in *.jpg;
    do convert $i -scale 800 -quality 75  ?????????????/net`basename $i`;
    
    
      echo "net`basename $i`"
      done
    
    echo "----Prozess beendet!-------"
    Danke
    M.tensor
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Code:
    man sed
    man bash
    man awk
    mit denen kannsst du alle rausfinden wie du was vor einen String hängst.
    ` ` sollte nicht mehr verwendet werden sondern $()

    Code:
    man cp
    man xargs
    solltest du dir auch mal anschauen

    für synchronisieren
    Code:
    man rsync
     
  4. #3 M.tensor, 21.08.2007
    Zuletzt bearbeitet: 21.08.2007
    M.tensor

    M.tensor Grünschnabel

    Dabei seit:
    24.08.2006
    Beiträge:
    8
    Zustimmungen:
    0
    Hilfereiche Tipps??

    Erstmal danke für die doch sehr dünnen Tipps!
    Ich bin mir nicht ganz sicher, aber wenn HowTo's oder andere Anleitung im Netz (so auch in diesem Board) nur mit einem trocken verweis auf die sog. "man" Hilfe gerichtet sind, dann sehe die "Script-Landschaft" sehr düster aus.
    Ich rede von effektiven Lernen - Vesuch und Irrtum ! Wenn man alles in Hilfedateien herauslesen kann, warum gibt es den solche Boards?

    Ich hoffe, dass man mir trotzdem weiter helfen kann. Mann muss nicht gleich ein ganzes Script schreiben! (Schließlich soll ja auch was hängen bleiben)

    Danke

    M.tensor
     
  5. #4 gropiuskalle, 21.08.2007
    gropiuskalle

    gropiuskalle terra incognita

    Dabei seit:
    01.07.2006
    Beiträge:
    4.857
    Zustimmungen:
    0
    Ort:
    Berlin
    OT:

    Solche Hinweise wie auf u.a.

    ...finde ich allerdings auch ein wenig überflüssig - damit kann man so ziemlich jede Kommandozeilenfrage wegbügeln... Summa summarum werden hier einfach mal ein paar hundert Seiten manpages zum lesen vorgeschlagen, und das ist ja wohl bei allem Respekt vor der RTFM-Philosophie kein konkreter Lösungsansatz. Nix für Ungut, smg.
     
  6. #5 tr0nix, 21.08.2007
    Zuletzt bearbeitet: 21.08.2007
    tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Der Code ist ausm Kopf getippt, wird vermutlich nicht 1:1 so funktionieren!

    verkleinern.sh:
    Teste das besser in einem sicheren Directory :)

    Wenn du das ganze noch mit einer Synchronisationslösung versehen willst, machst du in der zweiten for-Schleife zuerst noch eine Prüfung, ob die Datei bereits existiert - falls ja -> schleife fortsetzen, falls nein -> convert anstossen.
     
  7. #6 M.tensor, 21.08.2007
    M.tensor

    M.tensor Grünschnabel

    Dabei seit:
    24.08.2006
    Beiträge:
    8
    Zustimmungen:
    0
    Das sieht schon mal sehr gut aus!

    Vielen Dank für die schnelle Antwort!

    Da ich noch nicht so tiefgehende Erfahrungen mit sed habe, habe ich noch eine Frage zu der Aussage von
    Code:
    sed s/\\//\\/net/g
    .
    Was genau gebe ich mit der Zeile an?

    Ich habe das script mal laufen lassen, mit dem Resultat:

    sed: -e Ausdruck #1, Zeichen 5: unknown option to `s'
    sed: -e Ausdruck #1, Zeichen 5: unknown option to `s'
    convert: unable to open image `/home/user/netFotos/': Is a directory.
    sed: -e Ausdruck #1, Zeichen 5: unknown option to `s'
    convert: unable to open image `/home/user/netFotos/': Is a directory.
    sed: -e Ausdruck #1, Zeichen 5: unknown option to `s'
    convert: unable to open image `/home/user/netFotos/': Is a directory.
    sed: -e Ausdruck #1, Zeichen 5: unknown option to `s'
    convert: unable to open image `/home/user/netFotos/': Is a directory.
    sed: -e Ausdruck #1, Zeichen 5: unknown option to `s'
    convert: unable to open image `/home/user/netFotos/': Is a directory.
    sed: -e Ausdruck #1, Zeichen 5: unknown option to `s'
    convert: unable to open image `/home/user/netFotos/': Is a directory.
    sed: -e Ausdruck #1, Zeichen 5: unknown option to `s'
    Abbruch...

    Vielen Dank.

    M.tensor
     
  8. #7 smg, 21.08.2007
    Zuletzt bearbeitet: 21.08.2007
    smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Quotes benutzen bitte oder richtig escapen, evt anderen Delimiter / Begrenzer wählen um unötiges Escapen zu vermeiden.
     
  9. #8 Wolfgang, 21.08.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Zu sed:
    Du solltest das/die Kommandos schon in Hochkommas einschließen:
    also
    Code:
    sed -e 's/foobar/' input
    
    Du kannst beim Ersetzen eines Slash (wie du dort vorhattest) besser einen anderen Delimiter verwenden, dann sparst du dir das Escapen.
    Also einen Slash ersetzen:
    Code:
    sed -e 's#/#/bla#g' input
    
    Um mit find die Verzeichnisstruktur von Oben nach Unten zu durchlaufen, kannst du die Option -depth nutzen.
    Das spart bei mkdir die Option -p
    ;)

    Gruß Wolfgang
     
  10. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Also unter Solaris funzt das so ganz prima. Ist ggf. nicht schönster Programmierstil, aber den sucht man normalerweise ja auch nicht in der Shell :).
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    OT: Och, so bissal Shellcode (Bash/zsh) kann auch sexy sein. :)
     
  13. #11 M.tensor, 21.08.2007
    M.tensor

    M.tensor Grünschnabel

    Dabei seit:
    24.08.2006
    Beiträge:
    8
    Zustimmungen:
    0
    Bin schon etwas weiter, aber ich brauch noch Hilfe

    Also,

    es sicht so bei mir aus:
    Code:
    #!/bin/bash
    #conv2net
    echo "-------------------Working ! ----------------------"
    echo "-------don't touch the system while running -------"
    base="/home/user"
    picdir="Fotos"
    cd $base/$picdir
    for newdir in `find -type d`;
    do mkdir -pv $base/net$picdir/$newdir
    done
    for jpg in `find $base/$picdir`;
    # -name "*.jpg"`;
    do convert $jpg -scale 800 $base/net$picdir/$newdir/$jpg;
    echo "/net`basename $jpg`"
    done
    nun ist es so das Ordner angelegt werden, aber nicht wie im urspr. Fotos-Verzeichnis.
    ....Fotos/2003/...
    ....Fotos/2004/...
    ...
    in meinen neuen netFotos sind viele Ordner angelegt worden, die durch den "find" Befehl erzeugt wurden.
    Im Klartext:
    im Ordner Fotos befinden sich die die Unterordner 2003 bis 2007 mit ihren jeweiligen Unterordnern. Im Ordner netFotos sind viele Ordner, die z.T. aus den unteren Ordnern stammen.
    Wie kann ich im Befehl sagen, dass alles wortwörtlich übernommern werden soll. Es wird woll mit "sed" funktionieren, aber ich weis nicht wie.!

    Danke
    M.tensor
     
Thema:

hunderte Bilder bearbeiten...

Die Seite wird geladen...

hunderte Bilder bearbeiten... - Ähnliche Themen

  1. WordPress 4.4 »Clifford« passt Bilder automatisch an

    WordPress 4.4 »Clifford« passt Bilder automatisch an: Die Wordpress-Entwickler haben ihre freie Blog-Software in der Version 4.4 veröffentlicht. Der Namensgeber dieser Version ist der 1956 verstorbene...
  2. Darktable 1.6 unterstützt riesige Bilder

    Darktable 1.6 unterstützt riesige Bilder: Die virtuelle Leuchttisch- und Dunkelkammer-Anwendung Darktable ist in der Version 1.6 erschienen. Die Software möchte Fotografen bei ihrer Arbeit...
  3. Canonical anonymisiert Dash-Suchbilder

    Canonical anonymisiert Dash-Suchbilder: Wie David Callé in einer kurzen Mitteilung bekannt gab, wird bereits die kommende Version von Ubuntu die über das Dash abgesetzten Suchanfragen...
  4. Artikel: PNG-Bilder (automatisch) optimieren

    Artikel: PNG-Bilder (automatisch) optimieren: Eine Frage, die man sich bei der Überschrift stellen könnte, ist: »Sind meine Bilder nicht optimal?« Die Antwort ist, dass alles eine Frage der...
  5. mit makefile bilder convertieren (ImageMagick)

    mit makefile bilder convertieren (ImageMagick): Hi, ich würde gern mit einer Makefile alle Bilder in ein bestimmtes format konvertieren. Zum konvertieren möchte ich ImageMagick benutzen. Das...