Filenamenvariable nur bis 999

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
withorwithoutaname
Beiträge: 30
Registriert: 27.11.2006 11:51:22

Filenamenvariable nur bis 999

Beitrag von withorwithoutaname » 12.01.2007 19:56:03

Hallo Leute,

ich habe hier über 1000 pbm-Grafikdateien, 0001.pbm usw., die ich mit

Code: Alles auswählen

for i in $(ls *.pbm); do convert $i -resize ... $i ; done
bearbeiten will (convert=Imagemagick). Leider bleibt die Schleife beim Zähler 999 stehen.

Was kann man machen?

Gruß,
DS

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von GoKi » 12.01.2007 20:08:03

z.B. find benutzen, damit die bash nicht das * expandiert

das hier nutze ich z.B. in einem meiner Scripts

Code: Alles auswählen

#!/bin/bash
for FILE in $(find . -name "*.jpg"); do
  PNG=${FILE%.jpg}.png
  echo -n "Converting $FILE => $PNG "
  convert $FILE $PNG
  echo "done."
done
MfG GoKi
:wq

withorwithoutaname
Beiträge: 30
Registriert: 27.11.2006 11:51:22

Beitrag von withorwithoutaname » 12.01.2007 20:15:35

Im Zusammenhang damit: ich habe gerade gesehen, daß die bash die Filenamen (0001.pbm-1305.pbm) so sortiert (ls *.pbm):

001.pbm
002.pbm
...
099.pbm
1000.pbm
1001.pbm
...
1009.pbm
100.pbm
1010.pbm
...
999.pbm
(Ende)

Kann man das ändern?

DS

Benutzeravatar
dopehouse
Beiträge: 452
Registriert: 01.09.2005 12:02:16
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Hildesheim (Niedersachsen)
Kontaktdaten:

Beitrag von dopehouse » 12.01.2007 22:01:23

Also mein Vorschlag wäre sowas in der Art:

Code: Alles auswählen

#!/bin/bash
for i in *.pbm
  do
  convert $i -resize ... $i
done
Habe z.B. ein Script, dass mir aus allen Bildern eines Verzeichnises Thumbnails in einem Unterverzeichnis erstellt und dabei gleich noch die Thumbnails etwas platzsparender als JPEG speichert.

Code: Alles auswählen

#!/bin/bash
dir="thumbs"
ext="jpeg"

mkdir -p "$dir"

for i in *.png
	do
	name=`echo "$i" | sed 's/\.png//'`
	echo "$i => $dir/$name.$ext"
	convert "$i" -resize 150 -quality 40 "$dir"/"$name"."$ext"
done
echo "Fertitsch!"

Antworten