sonnenblen.de - Das unabhängige Sun User Forum

Software => Programmieren, Kompilieren => Thema gestartet von: signal_15 am 23. September 2009, 11:55:48

Titel: Skriptum zum umbenennen von Dateien
Beitrag 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

Titel: Re: Skriptum zum umbenennen von Dateien
Beitrag von: dominik am 23. September 2009, 13:31:37
Mal ganz primitiv:

Zitat
#!/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
Titel: Re: Skriptum zum umbenennen von Dateien
Beitrag von: Ten Little Indyans am 23. September 2009, 17:57:04
Ich tät printf verwenden um 4 Stellen linksbündig mit 0 aufzufüllen:
Zitat
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
Zitat
        count=`printf %04d \`expr ${count} + 1\``

Lässt sich leicht auf 5 Stellen und mehr anpassen. ;)
Titel: Re: Skriptum zum umbenennen von Dateien
Beitrag von: dominik am 24. September 2009, 07:45:32
Ich tät printf verwenden um 4 Stellen linksbündig mit 0 aufzufüllen:
Zitat
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
Zitat
        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
Titel: Re: Skriptum zum umbenennen von Dateien
Beitrag von: Ten Little Indyans am 24. September 2009, 08:47:50
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:
Zitat
$ 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:
Zitat
$ 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
Titel: Re: Skriptum zum umbenennen von Dateien
Beitrag von: dominik am 24. September 2009, 09:22:44
Ähm ja, ich nehme alles zurück und behaupte das Gegenteil :-)


Gruss
Dominik
Titel: Re: Skriptum zum umbenennen von Dateien
Beitrag von: signal_15 am 24. September 2009, 09:29:00
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#
Titel: Re: Skriptum zum umbenennen von Dateien
Beitrag von: signal_15 am 24. September 2009, 09:33:24
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,