Superuser

Autor Thema: Skriptum zum umbenennen von Dateien  (Gelesen 8276 mal)

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Skriptum zum umbenennen von Dateien
« 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


sonnenblen.de - Das unabhängige Sun User Forum

Skriptum zum umbenennen von Dateien
« am: 23. September 2009, 11:55:48 »

Offline dominik

  • Sobl Bachelor
  • ***
  • Beiträge: 182
  • Me, myself & I
    • Meine Heimseite
Re: Skriptum zum umbenennen von Dateien
« Antwort #1 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

Offline Ten Little Indyans

  • Sobl Bachelor
  • ***
  • Beiträge: 218
Re: Skriptum zum umbenennen von Dateien
« Antwort #2 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. ;)

Offline dominik

  • Sobl Bachelor
  • ***
  • Beiträge: 182
  • Me, myself & I
    • Meine Heimseite
Re: Skriptum zum umbenennen von Dateien
« Antwort #3 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

Offline Ten Little Indyans

  • Sobl Bachelor
  • ***
  • Beiträge: 218
Re: Skriptum zum umbenennen von Dateien
« Antwort #4 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

Offline dominik

  • Sobl Bachelor
  • ***
  • Beiträge: 182
  • Me, myself & I
    • Meine Heimseite
Re: Skriptum zum umbenennen von Dateien
« Antwort #5 am: 24. September 2009, 09:22:44 »
Ähm ja, ich nehme alles zurück und behaupte das Gegenteil :-)


Gruss
Dominik

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Skriptum zum umbenennen von Dateien
« Antwort #6 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#

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: Skriptum zum umbenennen von Dateien
« Antwort #7 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,