Ich habe eine Reihe von Verzeichnissen und Unterverzeichnissen, die Dateien mit Sonderzeichen enthalten, wie diese Datei:
robbie@phil:~$ ls test�sktest.txt
test?sktest.txt
Suchen zeigt eine Escape-Sequenz:
robbie@phil:~$ find test�sktest.txt -ls
424512 4000 -rwxr--r-x 1 robbie robbie 4091743 Jan 26 00:34 test\323sktest.txt
Der einzige Grund, warum ich ihre Namen in die Konsole eingeben kann, ist der Tabulatorabschluss. Dies bedeutet auch, dass ich sie manuell umbenennen kann (und das Sonderzeichen entfernen kann).
Ich habe LC_ALL auf UTF-8 gesetzt, was anscheinend nicht hilft (auch nicht auf einer neuen Shell):
robbie@phil:~$ echo $LC_ALL
en_US.UTF-8
Ich verbinde mich mit ssh von meinem Mac mit dem Computer. Es ist eine Ubuntu-Installation:
robbie@phil:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=7.10
DISTRIB_CODENAME=gutsy
DISTRIB_DESCRIPTION="Ubuntu 7.10"
Shell ist Bash, TERM ist auf xterm-color gesetzt.
Diese Dateien gibt es schon eine ganze Weile und sie wurden nicht mit dieser Ubuntu-Installation erstellt. Ich weiß also nicht, wie die Einstellungen für die Systemcodierung waren.
Ich habe Dinge ausprobiert wie:
find . -type f -ls | sed 's/[^a-zA-Z0-9]//g'
Aber ich kann keine Lösung finden, die alles kann, was ich will:
- Identifizieren Sie alle Dateien mit nicht darstellbaren Zeichen (die oben genannten ignorieren viel zu viel).
- Führen Sie für alle diese Dateien in einem Verzeichnisbaum (rekursiv) mv oldname newname aus
- Optional besteht die Möglichkeit, Sonderzeichen wie ä in a zu transliterieren (nicht erforderlich, wäre aber genial)
ODER
- Alle diese Dateien korrekt anzeigen (und keine Fehler in Anwendungen, wenn Sie versuchen, sie zu öffnen)
Ich habe Teile und Stücke, wie alle Dateien durchlaufen und verschieben, aber die Dateien zu identifizieren und sie richtig für den Befehl mv zu formatieren, scheint der schwierige Teil zu sein.
Zusätzliche Informationen darüber, warum sie nicht korrekt angezeigt werden oder wie die richtige Codierung "erraten" werden kann, sind ebenfalls willkommen. (Ich habe convmv ausprobiert, aber es scheint nicht genau das zu tun, was ich will: http://j3e.de/linux/convmv/ )