Beim Benutzen von unterschiedlichen Filesystemen als Ablageort für Dateien von unterschiedlichen Betriebssystemen kann es vorkommen, dass Dateinamen mit Umlauten oder anderen Sonderzeichen nicht auf allen anderen Betriebssystemen gleich aussehen. Dies liegt einerseits daran, dass bei der Erstellung der Datei evtl. falsche Zeichensätze für das Dateisystem vorgegeben worden sind und das jeweilige andere Betriebssystem die Zeichen im Dateinamen dann falsch interpretiert. Hinzu kommen noch Netzwerkclients, die evtl. die erforderliche Konvertierung nicht ordnungsgemäß durchführen und so Dateinamen mit Sonderzeichen falsch auf dem Zielsystem erstellen.
Eine oft anzutreffende Variante beim Zusammenspiel von Windows und Linux sind Dateinamen, die von Windows mit dem Zeichensatz ISO-8859-1 oder ISO-8859-15 kodiert worden sind, von Linux aber als UTF-8 erwartet werden.
Bei der Auflistung solch falsch kodierter Dateinamen erhält man dann z.B. folgende Namen: Brief f�r Foobar.doc.
Ein Anschließendes Öffnen des Dokuments erzeugt in z.B. LibreOffice dann die Fehlermeldung Die Datei oder der Ordner Brief f�r Foobar.doc existiert nicht.
In der Linux-Shell kann man solche falsch benannten Dateien einfach umbenennen. In diesem Beispiel würde das mit folgendem Befehl geschehen:
mv Brief\ f?r\ Foobar.doc Brief\ für\ Foobar.doc
Anstelle der Sonderzeichen setzt man das Fragezeichen, welches als Maske für genau ein Zeichen steht. Wichtig ist die Maskierung von Leerzeichen mit einem vorgestellen umgekehrten Schrägstrich (Backslash). Alternativ zum Maskieren mit dem Backslash (auch Escapen genannt) können die beiden Dateinamen auch in Anführungszeichen (") eingefasst werden.
mv "Brief f?r Foobar.doc" "Brief für Foobar.doc"
Bei wenigen Dateien kann diese Umbenennung von Hand erfolgen. Was aber, wenn sehr viele Dateinamen zu korrigieren sind? Auch hier ist bereits ein geeignetes Linux-Utility vorhanden: convmv. Mit dem Befehl
convmv -f iso-8859-15 -t utf-8 --notest /verzeichnis/zu/den/dateien/
werden im angegeben Verzeichnis die Dateinamen vom Zeichensatz ISO-8859-15 in den Zeichensatz UTF-8 konvertiert. Mit dem Schalter -r kann diese Aufgabe auch gleich für alle darunterliegenden Verzeichnisse ausgeführt werden. Sollte das Utility nicht bereits auf dem Rechner installiert worden sein, kann es über Synaptic oder mit dem Befehl
sudo apt-get install convmv
installiert werden.
Hallo,
Ich hatte genau dieses Problem und konnte es dank Deinem Post mit convmv schnell lösen.
Danke!
Was bedeutet "Schalter -r" ? (Mit dem man das für darunter liegende Verzeichnisse gleich miterledigen kann)
-r bedeutet rekursiv. Mit -r bearbeitet convmv die Dateien in allen Unterverzeichnissen unterhalb des angegebenen Verzeichnisses.
Mit -r wird hier alles unterhalb von
/verzeichnis/zu/den/dateien
bearbeitet.Verstehe.
Ist die Schreibweise egal ?
--notest hab ich in anderen Fällen z.B. schon hinter dem Dateinamen gesehen, deshalb wusste ich anfänglich nicht wohin mit dem -r .
Das kommt immer auf das jeweilige Programm an. Im allgemeinen gilt: "Programm Optionen Verzeichnisse/Dateien", kann aber wie gesagt auch anders sein. Die Man-Page von convmv verlangt "convmv [options] FILE(S) ... DIRECTORY(S)". Ein Blick in die Man-Page ist immer gut ;)
Es ist ja schon ein Ding... seit Jahren quäle ich mich mit dem Verschieben von Dateien zwischen NTFS, SMB-Protokollen und Linux-Dateisystemen. Immer wieder habe ich mount Optionen geändert, Samba Configs angepasst und im schlimmsten Fall Dateien auf der Konsole umbenannt... das hat mich Jahre meines Lebens gekostet... um dann nach 15 Minuten Suchmaschine quälen, Deinen Beitrag zu finden. Daten hin und her kopiert, den Befehl abgesetzt, 3 Minuten die SSD gequält und... fertig. Alles richtig. Ö, Ä, Ü, ß usw. einfach wieder richtig.
Ich bedanke mich vielmals! :-D
Danke für deinen super Beitrag. Hat mir sehr weitergeholfen :-)