Servus Nach diversem hin und her kopieren sind die Namen einiger meiner Dateien kaputt. Ä -> ÔöÇ ä -> ├Á Vor allem weil das große Ae drei anderen Zeichen entspricht denke ich nicht, dass es nur eine Umwandlung von iso-8859-15 auf utf8 ist. Daher war meine Idee, mir einfach ein kleines Shellskript zu schreiben, dass die Dateien mit Umlauten umbenennt, in dem ich z.B. ├Á durch ä ersetze. Funktioniert das oder bekomme ich Probleme, weil das Zeichen welches ich ändern will gar nicht richtig dargestellt werden kann? Bis dann, Tilo
Hallo, Am Donnerstag, 28. September 2006 18:37 schrieb Tilo Lutz:
Nach diversem hin und her kopieren sind die Namen einiger meiner Dateien kaputt. Ä -> ÔöÇ ä -> ├Á
Vor allem weil das große Ae drei anderen Zeichen entspricht denke ich nicht, dass es nur eine Umwandlung von iso-8859-15 auf utf8 ist.
Daher war meine Idee, mir einfach ein kleines Shellskript zu schreiben, dass die Dateien mit Umlauten umbenennt, in dem ich z.B. ├Á durch ä ersetze. Funktioniert das oder bekomme ich Probleme, weil das Zeichen welches ich ändern will gar nicht richtig dargestellt werden kann?
Sollte eigentlich mehr oder minder problemlos funktionieren, solange Du brav Escapes verwendest. Etwas komfortabler und weniger fehleranfällig (z.B. Pipe...!) ist KRename, damit solltest Du weniger Probleme haben. -- Michael Herrmann
Am Donnerstag, 28. September 2006 19:12 schrieb Michael Herrmann:
Etwas komfortabler und weniger fehleranfällig (z.B. Pipe...!) ist KRename, damit solltest Du weniger Probleme haben.
krename ist nicht geeignet und funktioniert nicht. Die kaputten Umlaute sind auch in Verzeichnissen. Nach dem das Verzeichnis umbenannt wurde, findet krename nicht mehr dessen Inhalt. Ich habe mir ein kleines Perl-Skript geschrieben, dass die Umwandlung übernehmen soll: #! /usr/bin/perl sub renameloop { my $dirname = $_[0]; opendir(DIR, $dirname); my @entries = readdir(DIR); foreach $oldfilename (@entries) { if ( $oldfilename ne "." && $oldfilename ne ".." ) { if (-d $dirname."/".$oldfilename) { renameloop($dirname."/".$oldfilename); } my $newfilename = $oldfilename; $newfilename =~ tr /├Á/ä/; $newfilename =~ tr /├À/ö/; $newfilename =~ tr /┬│/ü/; $newfilename =~ tr /ÔöÇ/Ä/; $newfilename =~ tr /├ì/Ö/; $newfilename =~ tr /Ôûä/Ü/; $newfilename =~ tr /ÔûÇ/ß/; if ( $oldfilename ne $newfilename ) { rename ($dirname."/".$oldfilename, $dirname."/".$newfilename); } } } closedir(DIR); } renameloop('/music'); Leider macht das Skript noch mehr kaputt: tilo@acer:/music> ll insgesamt 4 drwxr-xr-x 2 tilo users 4096 2005-12-22 16:44 Ger├Áusch (disc 1) tilo@acer:/music> /home/tilo/rename.pl tilo@acer:/music> ll insgesamt 4 drwxr-xr-x 2 tilo users 4096 2006-09-29 12:39 Ger?????usch (disc 1) tilo@acer:/music> Kann mir einer von euch auf die Sprünge helfen, wo es klemmt? Bis dann, Tilo
Hallo, Am Fre, 29 Sep 2006, Tilo Lutz schrieb:
Am Donnerstag, 28. September 2006 19:12 schrieb Michael Herrmann:
Etwas komfortabler und weniger fehleranfällig (z.B. Pipe...!) ist KRename, damit solltest Du weniger Probleme haben.
krename ist nicht geeignet und funktioniert nicht. Die kaputten Umlaute sind auch in Verzeichnissen. Nach dem das Verzeichnis umbenannt wurde, findet krename nicht mehr dessen Inhalt. Ich habe mir ein kleines Perl-Skript geschrieben, dass die Umwandlung übernehmen soll:
#! /usr/bin/perl
use strict; use warnings; Siehe Signatur.
sub renameloop { my $dirname = $_[0]; opendir(DIR, $dirname);
my @entries = readdir(DIR); foreach $oldfilename (@entries) {
my @entries = grep { !/^\.{1,2}$/ } readdir(DIR); foreach my $oldname( @entries ) {
if ( $oldfilename ne "." && $oldfilename ne ".." ) {
entfaellt.
if (-d $dirname."/".$oldfilename) { renameloop($dirname."/".$oldfilename); } my $newfilename = $oldfilename; $newfilename =~ tr /???Á/ä/; $newfilename =~ tr /???À/ö/; $newfilename =~ tr /??????/ü/; $newfilename =~ tr /ÔöÇ/Ä/; $newfilename =~ tr /???ì/Ö/; $newfilename =~ tr /Ôûä/Ü/; $newfilename =~ tr /ÔûÇ/ß/;
Wie sind die Sonderzeichen eingegeben? Und sind das die richtigen? Uberpruefe die Dateinamen mit 'ls -b' und 'ls | od -t x1'. Und ueberpruefe ebenfalls die Zeichen im Script! Ausserdem: lies in perldoc perlop die Doku zu 'tr'. Du suchst: if (-d $dirname."/".$oldfilename) { renameloop($dirname."/".$oldfilename); } my $newfilename; { ## $_ vereinfacht hier den Schreibaufwand erheblich local $_ = $oldfilename; s/???Á/ä/g; s/???À/ö/g; s/??????/ü/g; s/ÔöÇ/Ä/g; s/???ì/Ö/g; s/Ôûä/Ü/; s/ÔûÇ/ß/; $newfilename = $_; }
if ( $oldfilename ne $newfilename ) { rename ($dirname."/".$oldfilename, $dirname."/".$newfilename); }
Du solltest hier noch testen, ob die Zieldatei existiert! if ( -e $newfilename ) { warn "new filename '$newfilename' for " . "'$oldfilename' exists. skipping"; } [..]
Leider macht das Skript noch mehr kaputt:
Siehe oben. -dnh -- Use strict! *WHAM* Strict, I tell you! And -w! *WHAM* *WHAM* *WHAM* -- Skud
participants (3)
-
David Haller
-
Michael Herrmann
-
Tilo Lutz