ubuntuusers.de

Umlaute in Dateinamen ersetzen

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

Cluhn

Anmeldungsdatum:
23. November 2010

Beiträge: 68

Wohnort: Augsburger Land

Heyho ☺ Mein DLNA-fähiger Blu-Ray Player hat Probleme mit Umlauten in den Namen von den Videodateien. Ich habe folgendes Script geschrieben dass alle Dateien in meinem Videoverzeichnis suchen soll und dort die Umlaute durch "ae" usw. ersetzen soll:

#!/bin/sh
for i in $(find /home/cbsrv/freigabe/Video -name '*.*' | sed 's/ /\\ /g')
        do
        x=$(echo $i | sed 's/Ä/Ae/g' | sed 's/Ö/Oe/g' | sed 's/Ü/Ue/g' | sed 's/ä/ae/g' | sed 's/ö/oe/g' | sed 's/ü/ue/g' | sed 's/ß/ss/g')
        mv $i $x
done

Wie man sieht versuche ich die Leerzeichen zu maskieren da ansonsten bei jedem Leerzeichen sozusagen "ein neuer Pfad" bzw. "eine neue Datei" erkannt wird. Allerdings liegt das wohl nicht daran, denn wenn ich versuche die Leerzeichen zu maskieren wird folgendes ausgegeben:

mv: Aufruf von stat für „/home/cbsrv/freigabe/Video/Serien/Two\\“ nicht möglich: No such file or directory
mv: Aufruf von stat für „and\\“ nicht möglich: No such file or directory
mv: Aufruf von stat für „a\\“ nicht möglich: No such file or directory
mv: Aufruf von stat für „half\\“ nicht möglich: No such file or directory
mv: Aufruf von stat für „men/Season\\“ nicht möglich: No such file or directory
mv: Aufruf von stat für „6/S06E09\\“ nicht möglich: No such file or directory
mv: Aufruf von stat für „Mali\\“ nicht möglich: No such file or directory
mv: Aufruf von stat für „Buh.mkv“ nicht möglich: No such file or directory

Wie ihr seht wird der Pfad und auch der Episodenname dieser bekannten Fernsehserie "zerlegt". Ziemlich nervig! Was habe ich falsch gemacht? :/ Wie kann ich das Problem lösen?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17576

Wohnort: Berlin

Etwa so:

find -name "*[äöüÄÖÜß]*" -exec rename 's/ä/ae/g;s/ö/oe/g' {} \; 

solltest Du es machen.

Find weiß, wenn es eine Datei findet, wo der Namen anfängt und aufhört, d.h. wenn Du so Sachen wie ein

for i in $(find ...) ; do ...
# oder
find ... | xargs 

verhindern kannst mußt Du gar nichts maskieren - {} ist der ganze Dateiname.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17576

Wohnort: Berlin

P.S.: Du brauchst auch selten eine Pipeverkettung mit sed:

sed befehl1;befehl2;befehl3 datei

tut es auch

Cluhn

(Themenstarter)

Anmeldungsdatum:
23. November 2010

Beiträge: 68

Wohnort: Augsburger Land

Ah 😀 Wieder was gelernt. Da hab ich es wieder mal unnötig kompliziert gemacht. :< Aber vielen Dank!

fahrradfahrer

Avatar von fahrradfahrer

Anmeldungsdatum:
22. Oktober 2008

Beiträge: 130

Wohnort: Leipzig

user unknown schrieb:

Etwa so:

find -name "*[äöüÄÖÜß]*" -exec rename 's/ä/ae/g;s/ö/oe/g' {} \; 

solltest Du es machen.

Sowas habe ich schon lange gesucht - vielen Dank. Und hier für alle, die vollständige Zeile zum kopieren:

find -name "*[äöüÄÖÜß]*" -exec rename 's/ä/ae/g;s/ü/ue/g;s/ß/ss/g;s/Ä/Ae/g;s/Ü/Ue/g;s/Ö/Oe/g;s/ö/oe/g' {} \;

Da kann man mit Mausklicks unter Nautilus ewig basteln - geht nix über die Kommandozeile ☺

mmario-hotmail-de

Anmeldungsdatum:
23. Juli 2014

Beiträge: 1

wirklich genial & so einfach ☺ Danke

treki2

Avatar von treki2

Anmeldungsdatum:
19. Juni 2009

Beiträge: 317

Wohnort: Schweiz

Ich klink mich mal hier ein ☺ Ist wirklich toll. Aber ich hab noch das Problem, dass ich ein riesiges Verzeichnis mit Diskografien habe, in welchen das <?> (falsche Kodierung) steht und nebst Umlauten auch noch \ [ ] ' usw. Ich würde gern ein Script erstellen, welches das alles erledigt. Im Prinzip eine Mischung aus convmv und Pyrenamer. Dabei wäre es verkraftbar, wenn alle korrigierten Zeichen verloren gehn oder durch einen . ersetzt werden. Gibt's sowas schon (?) oder kann mir da jemand unter die Arme greifen 🙄

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17576

Wohnort: Berlin

treki2 schrieb:

Ich klink mich mal hier ein ☺ Ist wirklich toll. Aber ich hab noch das Problem, dass ich ein riesiges Verzeichnis mit Diskografien habe, in welchen das <?> (falsche Kodierung) steht und nebst Umlauten auch noch \ [ ] ' usw.

Die Frage ist, was für ein Code das genau ist. Manche Programme zeigen ein kl. Symbol an, in dem die 4 Zeichen die den Unicode bilden, wie bei einer 4 auf dem Würfel angeordnet sind, etwa so:

1
2
A4
3C

aber nur ein Zeichen hoch u. breit. Müsstest Du mal im Browser, im Dateimanager, in mc versuchen oder mit ls oder ls | less.

Eine Möglichkeit ist, alles was nicht a-zA-Z0-9 und Punkt ist umzubenennen - da ist aber die Frage welche anderen Symbole noch vorkommen, die dann auch verloren gehen, oder mit in die negierte Gruppe müssen.

1
rename -n "s/[^a-zA-Z0-9.-]/_/g" *.xyz

wäre das Muster einer solchen, negierten Gruppe (Caret als erstes Zeichen in den eckigen Klammern).

Wenn sehr viele Dateien solche Sonderzeichen haben kann es sich aber lohnen, diese korrekt umzusetzen.

treki2

Avatar von treki2

Anmeldungsdatum:
19. Juni 2009

Beiträge: 317

Wohnort: Schweiz

Genau. Die Unicode-Zeichen werden als solche Würfel angezeigt. Die Zeile mit den negierten Zeichen sieht vielversprechend aus. Kann ich dem auch irgenwie beibringen, dass Dateien und Verzeichnise rekursiv bearbeitet werden?

Edit: Habe nun ein lauffähiges Script, welches die Dateinamen und Unterverzeichnisse mit "genormten" Namen versieht. Nun hat es auch keine Probleme mit mehreren Unterverzeichnissen mehr ☺ Für diejenigen, dies interessiert, bitte sehr:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash

#Ordner
find -depth -type d -execdir rename -v 's/Ä/Ae/g;
s/Ö/Oe/g;
s/Ü/ue/g;
s/ä/ae/g;
s/à/a/g;
s/è/e/g;
s/é/e/g;
s/ö/oe/g;
s/ü/ue/g;
s/@/at/g;
s/\"/-/g;
s/\[/-/g;
s/\]/-/g;
s/\302\201/ue/g;
s/\302\204/ae/g;
s/\302\224/oe/g;
s/\201/ue/g;
s/\224/oe/g;
s/\204/ae/g;
s/\232/Ue/g;
s/\207/./g;
s/\200/./g;
s/�/ae/g;
s/�/oe/g;
s/ /_/g;
s/,/_/g;
s/\)/-/g;
s/\(/-/g;
s/\:/-/g;
s/\&/und/g;
s/\+/und/g;
s/\x27/_/g;
' '{}' \;

#Datei
find . -type f -exec rename -v 's/Ä/Ae/g;
s/Ö/Oe/g;
s/Ü/ue/g;
s/ä/ae/g;
s/à/a/g;
s/è/e/g;
s/é/e/g;
s/ö/oe/g;
s/ü/ue/g;
s/@/at/g;
s/\"/-/g;
s/\[/-/g;
s/\]/-/g;
s/\302\201/ue/g;
s/\302\204/ae/g;
s/\302\224/oe/g;
s/\201/ue/g;
s/\224/oe/g;
s/\204/ae/g;
s/\232/Ue/g;
s/\207/./g;
s/\200/./g;
s/�/ae/g;
s/�/oe/g;
s/ /_/g;
s/,/_/g;
s/\)/-/g;
s/\(/-/g;
s/\:/-/g;
s/\&/und/g;
s/\+/und/g;
s/\x27/_/g;
' '{}' \;
Antworten |