Es ist wichtig zu verstehen, dass dies nicht die Art von "Dateisystembeschädigung" ist, fsck
die dabei hilft. Für das Dateisystem können Dateinamen eine beliebige Folge von Bytes sein , sofern kein einzelnes Byte den Wert 0x00 (ASCII-NUL, C-Zeichenfolgenendemarker) oder 0x2F ( /
das Verzeichnistrennzeichen) hat. (Wenn ein Dateiname irgendwie ein 00- oder 2F-Byte enthält, fsck
sollte dies behoben werden.)
Sie haben vielmehr Dateinamen, von denen die Anwendungssoftware (Dolphin ls
) annimmt, dass sie Zeichen enthalten, die in Ihrem Gebietsschema nicht angezeigt werden können. Daher werden diese durch Platzhalterzeichen ersetzt. Sie können nicht geben Sie die Zeichen entweder, so dass die Dateien zu manipulieren schwieriger ist, aber man kann es so lange tun , wie Sie es , ohne jemals Typisierung zu tun oder zu kopieren und den Namen einfügen. Wenn Sie beispielsweise die Problemdateien direkt in Dolphin löschen oder umbenennen, sollte dies einfach funktionieren (ich würde sogar sagen, dass dies ein Fehler in Dolphin ist, wenn es nicht funktioniert).
Wenn Sie in der Shell etwas dagegen unternehmen müssen (z. B. wenn sie Eigentum root
eines GUI-Programms sind und daher nicht von einem GUI-Programm geändert werden können), können Sie sie indirekt mit "glob" -Mustern benennen, die in der richtigen Reihenfolge erweitert werden (s) von Bytes und weitergegeben.
Jetzt möchten Sie natürlich nicht versehentlich Daten löschen, da Ihr Glob-Muster zu stark übereinstimmt. Daher empfehle ich, das Perl- rename
Dienstprogramm zu verwenden, um jeden Dateinamen in seine Hex-Codierung zu konvertieren:
$ rename '$_ = unpack("H*", $_)' *
Hierdurch werden keine Informationen zerstört - weder die Datei selbst noch die Bedeutung, die ursprünglich im Dateinamen enthalten war, bevor er beschädigt wurde. Es kann für bestimmte Dateien mit zB rückgängig gemacht werden
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
Achtung: Es gibt zwei Programme rename
unterschiedlicher Herkunft. Die oben genannten Befehle funktionieren nur mit denen, die mit Perl erstellt wurden. In Ubuntu ist das, was Sie wollen, das aus dem "Rename" -Paket, nicht das aus dem "Util-Linux" -Paket. rename -h
wird unterscheiden: das ist, was Sie wollen ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... das ist nicht was du willst ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
Der Schlüssel zu suchen ist "perlexpr". Möglicherweise haben Sie eine ältere Version des Perl-Umbenennungsprogramms, die nicht alle oben genannten Optionen versteht. Der angezeigte Befehl sollte jedoch weiterhin funktionieren.
Edit: Unter 14.04 .5 unterstützt das enthaltene Perl-Skript rename
den -h-Schalter nicht. Sie können bestätigen, dass Sie die richtige haben, indem Sie die Manpage überprüfen. man rename
In diesem Fall enthält die oberste Zeile Folgendes:
RENAME (1) Perl-Programmierer-Referenzhandbuch RENAME (1)