dateinamen öäüß erstzen durch oe ae ue ss

Message
Author
klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#16 Post by klopskuchen »

Tut mir leid, dazu kann ich nicht viel sagen. Ich hatte zuerst einen Tippfehler im Verdacht. Allerdings läuft auch das copy&paste meines Posts mit Testdateien problemlos.

Code: Select all

#ls /tmp/*%*
/tmp/aaa%20a.txt  /tmp/bbb%20b.txt  /tmp/ccc%40c.txt
#change.sh /tmp/
# ls /tmp/
aaa\ a.txt bbb\ b.txt ccc%40c.txt

MfG, Klopskuchen
When all else fails, read the instructions .

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#17 Post by jochen »

Na, dass dieser Thread doch immer wieder interessant wird... :)

Deine Version war:

Code: Select all

#!/bin/bash

find . -iname "*[%20]*" -depth -print | \
awk '
{
        match ($0,/.*\//)
        name = substr ($0,RLENGTH+1)
        pfad = substr ($0,1,RLENGTH)
        gsub (/$20/," ",name)
        print "mv '\''" $0 "'\'' '\''" pfad name "'\''"
}' | cat 
Das erste Problem liegt im find. In der ursprünglichen Aufgabenstellung waren einzelne Zeichen (Umlaute/Leerzeichen) gefragt, aber Du suchst nach einer Zeichenkette! Daher:

Code: Select all

find . -name "*%20*" -depth -print
-iname ist nicht erforderlich, da %20 mit Groß/Kleinschreibung nichts am Hut hat und die eckigen Klammern müssen weg, damit nach "%20" und nicht nach Prozentzeichen, Zweiern und Nullen gesucht wird. Das sollte auch das Problem erklären, dass die alte Version von Dir auch unpassende Dateinamen auswirft.

In Deinem gsub steckt ein Fehler, es muss

Code: Select all

gsub (/$20/," ",name)
lauten - beachte % statt $!

Die verbesserte Version ist also

Code: Select all

#!/bin/bash

find . -name "*%20*" -depth -print | \
awk '
{
        match ($0,/.*\//)
        name = substr ($0,RLENGTH+1)
        pfad = substr ($0,1,RLENGTH)
        gsub (/%20/," ",name)
        print "mv '\''" $0 "'\'' '\''" pfad name "'\''"
}' | cat 
Ohne jetzt groß weiter zu testen sollte das hinhauen... Sorry, aber bin müde und leg mich jetzt hin.

Jochen
Die grösste Lüge der EDV? "Mal eben..."

Post Reply