hunderte Bilder bearbeiten...

M

M.tensor

Grünschnabel
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
 
Zuletzt bearbeitet:
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
 
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
 
Zuletzt bearbeitet:
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.
 
Der Code ist ausm Kopf getippt, wird vermutlich nicht 1:1 so funktionieren!

verkleinern.sh:
BASE="/home/user/"
PICDIR="Fotos"
cd $BASE/$PICDIR
for newdir in `find . -type d | sed s/\\//\\/net/g`; do
mkdir -p $BASE/net$PICDIR/$newdir
done
for jpg in `find $BASE/$PICDIR -name "*.jpg"`; do
convert $jpg -scale 800 -quality 75 $BASE/net$PICDIR/`echo $jpg | sed s/\\//\\/net/g`
done

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.
 
Zuletzt bearbeitet:
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
 
Quotes benutzen bitte oder richtig escapen, evt anderen Delimiter / Begrenzer wählen um unötiges Escapen zu vermeiden.
 
Zuletzt bearbeitet:
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
 
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 :).
 
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
 

Ähnliche Themen

Samba - Konfiguration

Image Resizer

Bilder aus Verzeichnis konvertieren

bilder verkleinern

Convert > Verzeichnis erst. > packen (aber wie?)

Zurück
Oben