• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]Dateien umbenennen mit einer unschärfe!

ich bin ein Stück weitergekommen die schleife läuft jetzt

Code:
 #!/bin/bash
while read D; do
   d=$(echo $D | sed -e 's/\(^.*$\)/\L\1/' -e 's/[- _]/[-_ ]/g')


# echo -n "$D  : " ; find -iname "$d" | wc -l
 find -iname "$d" -exec echo -n "$D <---- " \; -print
# find -iname "$d" -exec mv {} "$D" \;

done < <(cat text.txt)

aber es muss nur auf Groß Klein Schreibung verglichen werden.


Gruß
compi
 
in der text.txt stehen die Dateinamen ohne Endung drinn, und die Endung ist png.

Muss man das noch mit einbauen?

Gruß
compi
 
A

Anonymous

Gast
compi schrieb:
in der text.txt stehen die Dateinamen ohne Endung drinn, und die Endung ist png.

Muss man das noch mit einbauen?

Sicher sonst geht nichts, aber Problemstellung war:
Unterschiede in der groß und klein Schreibweise, Leerzeichen können Bindestrich oder Underline sein.
..............
Bla1 Bla1 -> bla1 Bla1
bla2 Bla2 -> bLa2_bLa2
Bla3 bla3 -> bla3-Bla3

Dann
Ich habe mir die Dateinamen und die Einträge nochmal gründlich angeschaut.
Es gibt nur Unterschiede in der groß klein Schreibweise. Alle Dateinamen haben nur klein Buchstaben.
Alle Sonderzeichen sind richtig.
und dann plötzlich doch
in der text.txt stehen die Dateinamen ohne Endung drinn, und die Endung ist png.

Formuliere erst mal klar und eindeutig was du überhaupt machen willst und gib ein paar von den Orginaleinträgen aus deiner Textdatei und ein paar der dazugehörigen derzeitigen Dateinamen hier bekannt. Wenn sich alle 3 Minuten die Ausgangssitutation ändert hat sonst keiner Lust sich Gedanken zu machen um dir zu helfen.

robi
 
entschuldigung du hast natürlich Recht. Erstmal genaue Problembeschreibung.

Inhalt text.txt (Auszug)
Code:
1DE03 
1DE04 
1JE01_1A 
1JE01_1B 
1JE01_1C 
1JE0211 
1JE0212 
1JE02_10 
1JE02_13 
1JE02_14 
1JE02_15 
1JE02_16 
1JE02_2 
1JE02_3 
1Je02_4 
1Je02_5 
1Je02_6 
1Je02_7 
1Je02_8 
1Je02_9 
1Jm01_4 
1Jm01_5 
3La32E03 
En01_1_1 
En01_1_2



hier die Dateinamen
Code:
1de03.png
1de04.png
1je01 1a.png
1je01 1b.png
1je01 1c.png
1je0211.png
1je0212.png
1je02 10.png
1je02 13.png
1je02 14.png
1je02 15.png
1je02 16.png
1je02 2.png
1je02 3.png
1je02 4.png
1je02 5.png
1je02 6.png
1je02 7.png
1je02 8.png
1je02 9.png
1jm01 4.png
1jm01 5.png
3la32e03.png
en01 1 1.png
en01 1 2.png

und rauskommen soll dann:

Code:
1de03.png ---> 1DE03.png 
1de04.png  ---> 1DE04.png 
1je01 1a.png  ---> 1JE01 1A.png 
1je01 1b.png  ---> 1JE01 1B.png 
1je01 1c.png  ---> 1JE01 1C.png 
1je0211.png  ---> 1JE0211.png 
1je0212.png  ---> 1JE0212.png 
1je02 10.png  ---> 1JE02 10.png 
1je02 13.png  ---> 1JE02 13.png 
1je02 14.png  ---> 1JE02 14.png 
1je02 15.png  ---> 1JE02 15.png 
1je02 16.png  ---> 1JE02 16.png 
1je02 2.png  ---> 1JE02 2.png 
1je02 3.png  ---> 1JE02 3.png 
1je02 4.png  ---> 1Je02 4.png 
1je02 5.png  ---> 1Je02 5.png 
1je02 6.png  ---> 1Je02 6.png 
1je02 7.png  ---> 1Je02 7.png 
1je02 8.png  ---> 1Je02 8.png 
1je02 9.png  ---> 1Je02 9.png 
1jm01 4.png  ---> 1Jm01 4.png 
1jm01 5.png  ---> 1Jm01 5.png 
3la32e03.png  ---> 3La32E03.png 
en01 1 1.png  ---> En01 1 1.png 
en01 1 2.png  ---> En01 1 2.png


Also in der text.txt stehen die Dateinamenen ohne png aber in der richtigen Groß Klein Schreibweise.

Im Ordner befinden sich die png Dateien die ausschließlich aus Kleinbuchstaben (Zahlen und Sonderzeichen aussen vorgelassen) bestehen.
 
A

Anonymous

Gast
Code:
#!/bin/bash
while read D; do
   d=$(echo $D | sed -e 's/\(^.*$\)/\L\1'.png/ -e 's/_/ /g')
   D="$D".png

# die folgende Zeile auskonfiguren wenn in den neuen Dateien Unterstriche anstatt Leerzeichen sein sollen
   D=$(echo "$D" | sed 's/_/ /g')

# zum Test nur Ausgabe
   find -iname "$d" -exec echo -n "$D <---- " \; -print

# zum Umbenennen folgende Zeile scharf schalten
# find -iname "$d" -exec mv {} "$D" \;

done <  text.txt

robi
 
irgendwas ist da noch falsch bei

Code:
   d=$(echo $D | sed -e 's/\(^.*$\)/\L\1'.png/ -e 's/_/ /g')

kommt folgendes raus original

Code:
1DE03
1DE04
1JE01_1A
1JE01_1B

Code:
.png3
.png4
.png1_1A
.png1_1B

die Dateierweiterung wird leider nicht hinten ran gehangen.
 
A

Anonymous

Gast
compi schrieb:
die Dateierweiterung wird leider nicht hinten ran gehangen.

bei mir schon
Code:
# for D in 1DE03 1DE04 1JE01_1A 1JE01_1B; do d=$(echo $D | sed -e 's/\(^.*$\)/\L\1'.png/ -e 's/_/ /g');echo $d; done
1de03.png
1de04.png
1je01 1a.png
1je01 1b.png
ansonsten probiers mal so
Code:
d=$(echo $D | sed -e 's/^\(.*\)$/\L\1.png/;s/_/ /g')
und wenn es dann immer noch nicht geht, dann hast du dich endgültig als unverbesserlicher Windowsuser geoutet ;) der versucht auf der Konsole mit Windowsdateien zu arbeiten, dann mach einfach mal
Code:
dos2unix textdatei
Den Beweis liefere ich auch gleich noch mit.
Code:
rob@rob-linux:~/Dokumente> while read D; do d=$(echo $D | sed -e 's/^\(.*\)$/\L\1.png/;s/_/ /g');echo $d; done < text
1de03.png
1de04.png
1je01 1a.png
1je01 1b.png
rob@rob-linux:~/Dokumente> unix2dos text
unix2dos: converting file text to DOS format ...
rob@rob-linux:~/Dokumente> while read D; do d=$(echo $D | sed -e 's/^\(.*\)$/\L\1.png/;s/_/ /g');echo $d; done < text
.png3
.png4
.png1 1a
.png1 1b
rob@rob-linux:~/Dokumente> dos2unix text
dos2unix: converting file text to UNIX format ...
rob@rob-linux:~/Dokumente> while read D; do d=$(echo $D | sed -e 's/^\(.*\)$/\L\1.png/;s/_/ /g');echo $d; done < text
1de03.png
1de04.png
1je01 1a.png
1je01 1b.png
Weiter oben hatte ich schon mal geschrieben :???:
robi schrieb:
hatten wir schön öfter. zB hier war es "NO-BREAK SPACE (0xA0)" , hin und wieder hatten wir auch Windows-Zeilenumbrüche und ähnliches Probleme mehr.
und hatte nachgefragt nur leider keine Antwort bekommen.
robi schrieb:
Wie genau ist denn überhaupt die Datei mit den gewünschten Dateinamen erstellt worden ?

robi
 
Vielen vielen Dank du hast mein Wochenende gerettet

dos2unix

das wars es läuft problemlos durch!

Gruß
compi
 

framp

Moderator
Teammitglied
compi schrieb:
...
: not found
: not found
test.sh: 14: Syntax error: "done" unexpected (expecting "do")...
Oh manoman ... das diese irrigen Meldungen durch CR LF statt der erwarteten LF erzeugt werden ... vielleicht sollte da mal der bash Interpreter WindowsSicher gemacht werden und sinnvolle Meldungen wie 'CRLF detected - use dos2unix' ausspucken - oder sogar die Source vor der Interpretation automatisch durch den Filter jagen.
 
Oben