sonnenblen.de - Das unabhängige Sun User Forum
Software => Programmieren, Kompilieren => Thema gestartet von: signal_15 am 23. September 2009, 11:55:48
-
Mahlzeit,
ich brauche etwas hilfe bei einem teil eines skriptums, welches dateien mit neuem namen und fortlaufender nummer versieht.
for x in `ls -1 | ${grep} -E 'bmp|tif|jpg|jpeg'`;do
extension=`echo ${x} | ${awk} -F '.' '{print $2}'`
mv ${x} ${name}_${count}.${extension}
count=`expr ${count} + 1`
done
das umbenennen fuktioniert soweit ganz gut. mich stoert jedoch, dass die fortlaufende nummer nicht von anfang an mehrstellig ist. ich haette es ganz gerne, dass die sich ergebenden namen so aussehen:
file_0001.jpg
file_0002.jpg
file_0003.jpg usw.
irgendeine idee oder anregung in welche richtung ich schauen soll?
hier noch mal das ganze skriptum.
#!/bin/sh
grep=/usr/xpg4/bin/grep
awk=/usr/local/bin/awk
convert=/usr/local/bin/convert
exif=/opt/csw/bin/exiftool
today=`/bin/date +"%Y_%m_%d_%k-%M"`
name=$1
compression=$2
count=1
thumbresize="100x100"
interresize="800x800"
archive=Archive_${today}
archivedir="/var/ftp_anonymous/pub/Photos"
exif_make="Canon"
exif_model="A1"
exif_artist="WieWaldi"
exif_copyright="WieWaldi"
exif_exposuretime="1/60"
exif_fnumber="5,6"
exif_exposureprogram="manual"
exif_iso="100"
exif_shutterspeedvalue="1/60"
exif_aperturevalue="5"
exif_exposurecompensation="0"
exif_flash="no flash"
exif_focallength="50mm"
exif_usercomment="Affe"
exif_filesource="Film Scanner"
exif_exposuremode="Manual"
if [ $# -ne 2 ]; then
echo 1>&2 "\nFucking Usage is: $0 Name N\n"
echo 1>&2 " Where Name is the new file name\n Where N is the Compression Rate.\n\n"
exit 3
fi
for x in `ls -1 | ${grep} -E 'bmp|tif|jpg|jpeg'`;do
extension=`echo ${x} | ${awk} -F '.' '{print $2}'`
mv ${x} ${name}_${count}.${extension}
count=`expr ${count} + 1`
done
mkdir ${archivedir}/${archive}
for X in `ls -1 | ${grep} -E 'bmp|tif|jpg|jpeg'`;do
Y=`echo $X | awk -F '.' '{print $1}'`
YA=`echo ${Y}_thumb.jpg`
YB=`echo ${Y}_intermediate.jpg`
YC=`echo ${Y}_origsize.jpg`
echo "Resizing $X Image to Thumbnail $YA"
${convert} ${X} -resize ${thumbresize} -quality ${compression} ${archivedir}/${archive}/${YA}
echo "Resizing $X Image to Intermediate $YB"
${convert} ${X} -resize ${interresize} -quality ${compression} ${archivedir}/${archive}/${YB}
${exif} -overwrite_original \
-make=${exif_make} -model=${exife_model} -artist=${exif_artist} -copyright=${exif_copyright} \
-exposuretime=${exif_exposuretime} -fnumber=${exif_fnumber} \
-exposureprogram=${exif_exposureprogram} -iso=${exif_iso} -shutterspeedvalue=${exif_shutterspeedvalue} \
-aperturevalue=${exif_aperturevalue} -exposurecompensation=${exif_exposurecompensation} \
-flash="${exif_flash}" -focallength=${exif_focallength} -usercomment=${exif_usercomment} \
-filesource="${exif_filesource}" -exposuremode=${exif_exposuremode} ${archivedir}/${archive}/${YB}
echo "Converting ${X} Image to JPEG ${YC}, whith a rate of $1"
${convert} ${X} -quality ${compression} ${archivedir}/${archive}/${YC}
${exif} -overwrite_original \
-make=${exif_make} -model=${exife_model} -artist=${exif_artist} -copyright=${exif_copyright} \
-exposuretime=${exif_exposuretime} -fnumber=${exif_fnumber} \
-exposureprogram=${exif_exposureprogram} -iso=${exif_iso} -shutterspeedvalue=${exif_shutterspeedvalue} \
-aperturevalue=${exif_aperturevalue} -exposurecompensation=${exif_exposurecompensation} \
-flash="${exif_flash}" -focallength=${exif_focallength} -usercomment=${exif_usercomment} \
-filesource="${exif_filesource}" -exposuremode=${exif_exposuremode} ${archivedir}/${archive}/${YC}
done
exit 0
-
Mal ganz primitiv:
#!/usr/bin/bash
MAX=1000
COUNT=1
while [ ${COUNT} -le ${MAX} ]; do
if [ ${COUNT} -le 9 ]; then
PREFIX=000
elif [ ${COUNT} -le 99 ]; then
PREFIX=00
elif [ ${COUNT} -le 999 ]; then
PREFIX=0
else
PREFIX=
fi
echo ${PREFIX}$COUNT
COUNT=`expr ${COUNT} + 1`
done
Lässt sich sicher noch wesentlich verfeinern, aber so für die Schnelle tut's das eigentlich ganz gut und Du bist bis 9999 Files gut bedient.
Gruss
Dominik
-
Ich tät printf verwenden um 4 Stellen linksbündig mit 0 aufzufüllen:
for x in `ls -1 | ${grep} -E 'bmp|tif|jpg|jpeg'`;do
extension=`echo ${x} | ${awk} -F '.' '{print $2}'`
mv ${x} ${name}_${count}.${extension}
count=`expr ${count} + 1`
count=`printf %04d ${count}`
done
oder zusammengefasst
count=`printf %04d \`expr ${count} + 1\``
Lässt sich leicht auf 5 Stellen und mehr anpassen. ;)
-
Ich tät printf verwenden um 4 Stellen linksbündig mit 0 aufzufüllen:
for x in `ls -1 | ${grep} -E 'bmp|tif|jpg|jpeg'`;do
extension=`echo ${x} | ${awk} -F '.' '{print $2}'`
mv ${x} ${name}_${count}.${extension}
count=`expr ${count} + 1`
count=`printf %04d ${count}`
done
oder zusammengefasst
count=`printf %04d \`expr ${count} + 1\``
Lässt sich leicht auf 5 Stellen und mehr anpassen. ;)
Hmm, dann sieht es aber so aus:
00009
000010
[...]
000099
0000100
[...]
Sollte aber eher so sein (vermute ich mal):
00009
00010
[...]
00099
00100
[...]
Gruss
Dominik
-
Hmm, dann sieht es aber so aus:
Auf was für einem System denn..? Auf Solaris 2.6, 8 und 9 bekomme ich das erwartete Ergebnis, sowohl mit der Korn Shell als auch mit der normalen Bourne Shell.
Vierstellig:
$ count=0009
$ for x in 1 2 3 4 5 6 7 8 9 10 11; do
> echo $count
> count=`printf %04d \`expr ${count} + 10\``
> done
0009
0019
0029
0039
0049
0059
0069
0079
0089
0099
0109
Fünfstellig:
$ count=00009
$ for x in 1 2 3 4 5 6 7 8 9 10 11; do
> echo $count
> count=`printf %05d \`expr ${count} + 10\``
> done
00009
00019
00029
00039
00049
00059
00069
00079
00089
00099
00109
-
Ähm ja, ich nehme alles zurück und behaupte das Gegenteil :-)
Gruss
Dominik
-
Guten Morgen,
@Ten Little Indyans
das mit dem printf gefaellt mir auf anhieb ganz gut. jetzt muss ich nur herausfinden wie ich das mit der ersten datei mache. beim ersten durchlauf bleibt count unveraendert. erst beim zweiten durchlauf wird count 4 stellig.
ich hab das skriptum zum spielen nur auf das umbenennen gekuerzt.
#!/bin/sh
awk=/usr/local/bin/awk
grep=/usr/xpg4/bin/grep
name=$1
count=1
if [ $# -ne 1 ]; then
echo 1>&2 "Usage is: $0 Name"
echo 1>&2 " Where Name is the Basename"
exit 3
fi
for x in `ls -1 | ${grep} -E 'bmp|tif|jpg|jpeg'`;do
extension=`echo ${x} | ${awk} -F '.' '{print $2}'`
mv ${x} ${name}_${count}.${extension}
count=`expr ${count} + 1`
count=`printf %04d ${count}`
echo "count ist ${count}"
done
exit
das ganze ergibt dann folgendes:
ismine/var2/spiel# l
Current Directory is /var2/spiel
=================================================================
total 19K
drwxr-xr-x 2 root other 512 Sep 24 09:15 .
drwxr-xr-x 6 root root 512 Sep 23 10:59 ..
-rw-r--r-- 1 root other 5 Sep 24 09:15 filea.bmp
-rw-r--r-- 1 root other 5 Sep 24 09:15 filea.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 fileb.bmp
-rw-r--r-- 1 root other 5 Sep 24 09:15 fileb.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 filec.bmp
-rw-r--r-- 1 root other 5 Sep 24 09:15 filec.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 filed.bmp
-rw-r--r-- 1 root other 5 Sep 24 09:15 filed.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 filee.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 fileg.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 fileh.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 filei.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 filejj.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 filekk.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 filelll.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 filelml.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 filelnl.jpg
=================================================================
ismine/var2/spiel# rename.sh affe
count ist 0002
count ist 0003
count ist 0004
count ist 0005
count ist 0006
count ist 0007
count ist 0008
count ist 0009
count ist 0010
count ist 0011
count ist 0012
count ist 0013
count ist 0014
count ist 0015
count ist 0016
count ist 0017
count ist 0018
ismine/var2/spiel# l
Current Directory is /var2/spiel
=================================================================
total 19K
drwxr-xr-x 2 root other 512 Sep 24 09:16 .
drwxr-xr-x 6 root root 512 Sep 23 10:59 ..
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0002.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0003.bmp
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0004.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0005.bmp
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0006.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0007.bmp
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0008.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0009.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0010.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0011.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0012.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0013.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0014.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0015.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0016.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_0017.jpg
-rw-r--r-- 1 root other 5 Sep 24 09:15 affe_1.bmp
=================================================================
ismine/var2/spiel#
-
Guten Morgen,
ja schon klar. ist noch zu frueh am morgen fuer mich. wenn man erst um halb zwei in die federn kommt und schon um sechse wieder auf den beinen sein muss um die kinder fuer die schule fertig zu machen, dann.... gaehn.
einfach die zeilen getauscht und den anfangswert von count auf 0 gesetzt.
#!/bin/sh
awk=/usr/local/bin/awk
grep=/usr/xpg4/bin/grep
name=$1
count=0
if [ $# -ne 1 ]; then
echo 1>&2 "Usage is: $0 Name"
echo 1>&2 " Where Name is the Basename"
exit 3
fi
for x in `ls -1 | ${grep} -E 'bmp|tif|jpg|jpeg'`;do
extension=`echo ${x} | ${awk} -F '.' '{print $2}'`
count=`expr ${count} + 1`
count=`printf %04d ${count}`
echo "count ist ${count}"
mv ${x} ${name}_${count}.${extension}
done
exit
nochmals vielen dank an euch.
ct,