Per Shell Script CSV-Datei auslesen, anschliessend Dateien umbenennen

S

sep-karl

Jungspund
Hallo Board,

ich habe eine CSV datei, in der

Name;Vorname;RECNUMBER;AUSBILENDE;Geburtsdatum;Geschlecht;Klasse
Mustermann,Max,123456789;01.01.10;01.01.1990;M;BF81_01
stehen.

im selben Ordner habe ich Bilder, die "Klasse".jpg heissen also z.B. BF81_01.jpg nun möchte ich diese Bilder umbenennen in Name_Vorname_Geburtsdatum.jpg!

Da das manuell sehr Zeitaufwendig wäre, möchte ich dieses bitte per Shellscript tun.

vielen Dank schonmal im Voraus für eure Hilfe!!

gruß Sep
 
ok, habe jetzt mit "cut -d. -f 1,2,5 BF81.csv"
die Felder die ich brauche ausgelesen, jetzt müsste ich diese noch ins richtige format kriegen und anschliessend müsste ich die Bilder dann vermutlich mit "move" umbenennen, oder ?
Aber das Shellscript muss ja auch dem Bild den richtigen Namen zuordnen können, also brauche ich ja auch noch die 7. Zeile...
und wie würde es dann weiter gehen ??wie kann ich dem Script dann mitgeben, das es die datei nach dem alten namen der Bilder durchsucht und den Bildern dann den neuen Namen zuweist ??

gruß
 
Du hast eine Liste mit Daten, die gehst Du zeilenweise durch.

Aus jeder Zeile extrahierst Du dir den 1,2 und 5. Spalteneintrag.

Die baust Du zusammen zum neuen Dateinamen des Bildes.

"Dann" extrahierst Du Dir den 7. Spalteneintrag und bennnest das Bild mit diesem Namen um in den neuen Dateinamen.
 
das mit dem extrahieren habe ich jetzt ja mit cut hingekriegt, aber wie baue ich die am einfachsten zusammen und wie bennene ich das Bild denn dann danach um ?? sorry, bin nicht so der Experte im Shell-Script Bereich...
 
Code:
#!/bin/bash

for I in `cat csv.csv` ; do
    mv `echo $I | cut -d";" -f1`".jpg" `echo $I | cut -d";" -f2`"_"`echo $I | cut -d ";" -f3`".jpg"
done
oder so Ähnlich. Geht bestimmt eleganter.
 
#!/bin/bash
for I in `cat BF81.csv` do
move `echo $I | cut -d"," -f7.jpg `echo $I | cut -d"," -f1`"_"`echo $I
done

./umbenennen.sh
./umbenennen.sh: line 3: syntax error near unexpected token `move'
./umbenennen.sh: line 3: ` move `echo $I | cut -d"," -f7.jpg `echo $I | cut -d"," -f1`"_"`echo $I | cut -d "," -f2`.jpg"'

habe das jetzt so probiert, er gibt dann folgendes aus....
 
egal, ob mv oder move es kommt immer die gleiche Fehlermeldung...
 
vergleiche noch mal die Version von Dir mit der oben geposteten. Ich finde schon mal mindestens einen relevanten Unterschied...
 
Dann drösle es halt mal auf und vergleiche Wunsch mit Resultat:

Code:
#!/bin/bash

for I in `cat csv.csv` ; do
    echo "====================="

    EINGABE=`echo $I | cut -d";" -f1`".jpg"
    echo $EINGABE

    AUSGABE=`echo $I | cut -d";" -f2`"_"`echo $I | cut -d ";" -f3`".jpg"
    echo $AUSGABE

    VERBUND=$EINGABE  $AUSGABE
    echo $VERBUND

    BEFEHL=mv $VERBUND
    echo $BEFEHL

    exec $BEFEHL
done
 
Die csv datei ist mit "," getrennt und nicht mit ";"
Code:
#!/bin/bash

for I in `cat BF81.csv` ; do
    echo "====================="

        EINGABE=`echo $I | cut -d"," -f7`".jpg"
            echo $EINGABE

        AUSGABE=`echo $I | cut -d"," -f1`"_"`echo $I | cut -d "," -f2`".jpg"
            echo $AUSGABE

        VERBUND=$EINGABE  $AUSGABE
            echo $VERBUND

        BEFEHL=mv $VERBUND
            echo $BEFEHL

        exec $BEFEHL
         done


----

folgende Ausgabe:

Code:
./test.sh
=====================
.jpg_01
vorname_nachname.jpg
./test.sh: line 12: vorname_nachname.jpg: command not found

mv
mv: Fehlendes Dateioperand
âmv --helpâ gibt weitere Informationen.
 
Zuletzt bearbeitet:
Mein Fehler,

das muss VERBUND=$EINGABE" "$AUSGABE lauten.
Ist beim Copy&Paste was schiefgelaufen. Bei BEFEHL ist es das Selbe.
 
ok, vielen Dank, das funktioniert soweit schonmal sehr gut, hatte noch einen Fehler drin, den ich aber selber beheben konnte...

jetzt brauche ich nur noch ne Schleife oder ähnliches drumherum, momentan macht er das nur für die Person die in der ersten Zeile der csv datei steht er soll das ja für alle Leute machen, die in der CSV datei stehen.... oder aber, er soll die erste Zeile der csv datei löschen und danach nochmal von vorne anfangen, das würde auch gehen...
 
Zuletzt bearbeitet:
Die for-Schleife sollte eigentlich genau dafür sorgen :think:
Probier mal
Code:
while read I; do 
    EINGABE ... BEFEHL 
done < "datei.csv"

anstatt der for-Schleife
 
': not a valid identifier Name,Vorname,RECNUMBER,AUSBILENDE,Geburtsdatum,Geschlech,Klasse,

er ändert nur das Bild von dem jenigen, der in der ersten Zeile der csv datei steht...
 
poste doch nun mal das komplette, aktuelle Script und Beispieldaten.
 
Script:
Code:
#!/bin/bash

while read I ; do
    echo "====================="

        EINGABE=`echo $I | cut -d"," -f7`".JPG"
            echo $EINGABE

        AUSGABE=`echo $I | cut -d"," -f1`"_"`echo $I | cut -d "," -f2`".jpg"
            echo $AUSGABE

        VERBUND=$EINGABE" "$AUSGABE
            echo $VERBUND

        BEFEHL=mv" "$VERBUND
             echo $BEFEHL

        exec $BEFEHL
         done < "BF81.csv"
csv datei
Code:
Ak,Mustermann,1AB191XY15,31.07.2009,10.11.1991,M,BF81_01,
Musterfrau,Timo,AB1090XY23,31.07.2009,26.10.1990,M,BF81_02,
Tester,Fatih,220CD1XY23,31.07.2009,22.04.1991,M,BF81_03,
Bla,Hussein,121112XY22,31.07.2009,12.11.1991,M,BF81_04,
Blubb,Isabelle,0YO189XY22,31.07.2009,02.01.1989,W,BF81_05,
2malige Ausführung des Scriptes
Code:
./test.sh
=====================
BF81_01.JPG
Ak_Mustermann.jpg
BF81_01.JPG Ak_Mustermann.jpg
mv BF81_01.JPG Ak_Mustermann.jpg
root@keil-desktop:/home/keil/Desktop/schuelerausweise/BF81# ./test.sh
=====================
BF81_01.JPG
Ak_Mustermann.jpg
BF81_01.JPG Ak_Mustermann.jpg
mv BF81_01.JPG Ak_Mustermann.jpg
mv: Aufruf von stat für âBF81_01.JPGâ nicht möglich: No such file or directory
 
Zuletzt bearbeitet:
Ach heute ist nicht mein Tag :/
Entweder entfernst du mal bitte das Wort exec, oder du setzt ans Ende selbiger Zeile noch ein " &"
 
super, danke klappt... ist doch ein super Tag ;-)
 

Ähnliche Themen

ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

Kopieren von Dateien per Shell

Shell-Script zum auslesen von Dateien aus versch. Verzeichnissen

Probleme mit Shell-Script (Listen, Strings, etc.)

Zurück
Oben