FEHLER. Benennen Sie Dateien und Verzeichnisse mit für Windows reservierten Zeichen um

FEHLER. Benennen Sie Dateien und Verzeichnisse mit für Windows reservierten Zeichen um

Ich hatte eine Festplatte, die sich unter Linux Mint nicht mounten ließ. Um das zu beheben, musste ich zu Windows gehen und chkdsk /f e:chkdsk ausführen. Das Problem wurde behoben, aber es hat alle Dateien mit Sonderzeichen umbenannt und diese Dateien in ein found.000Verzeichnis verschoben. Jetzt muss ich diese Dateien also wieder verschieben und umbenennen, so wie sie vorher waren. Wenn ich von Zeit zu Zeit einen Befehl ausführe, um die Dateien mit Sonderzeichen umzubenennen, könnte ich verhindern, dass das wieder passiert.

Ich möchte rekursivDateien und Verzeichnisse umbenennenaus dem aktuellen Verzeichnis. DieZeilenumbrüchesollte ersetzt werdenfür den Weltraum, DieFiguren < > : " \ | ? *sollte seinENTFERNToder besser noch ersetzt durch ähnliche Zeichen, die nicht reserviert sind und dieRäumeBei derBeginn und Endeeines Dateinamens sollteENTFERNTHier ist ein Beispiel fürwas ich möchte:

rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Fîlenämè $@')

Hier ist, was wärenoch besser:

rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Filename $@')

Entsprechenddiese Antwortes sollte ungefähr so ​​aussehen:

LC_ALL=C find . -depth -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +

Ich muss das ..Trash-1000Verzeichnis ignorieren, da dieser Befehl mir gibtEingabe-/Ausgabefehlerund der Befehl funktioniert nicht mehr. Ein Skript, das diese Fehler behandelt, falls sich in diesem Verzeichnis Dateien befinden, die umbenannt werden können, wäre perfekt.

..Trash-1000Mir wurde gesagt, ich solle das Verzeichnis wie folgt bereinigen :diese AntwortIch habe mir auch angesehenDieses hier. Aber das funktioniert nicht:

LC_ALL=C find . -depth -path ./..Trash-1000 -prune -o -print -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +

Und Leerzeichen am Anfang und Ende der Dateinamen werden immer noch nicht gelöscht.

Ich musste meine Frage umschreiben, denn die FrageSkript zum rekursiven Ersetzen ungültiger Zeichen in Dateinamen (nicht in Verzeichnissen) durch „rename“hat meine nicht beantwortet.

Antwort1

Anstatt das Verzeichnis zu bereinigen, was zu Eingabe-/Ausgabefehlern führt, kann der Befehl einmal für jedes der anderen Verzeichnisse ausgeführt werden.

Dies ist der Befehl, den ich zum Entfernen von für Windows reservierten Zeichen verwendet habe:

find . -execdir rename -n 's/[\r\n]+/ /g;
                           s/:/./g;
                           s/[\|]/-/g;
                           s/[<>"?*]//g;
                           s/[ \f\t\v]+$//g;
                           s/^[ \f\t\v]+//g' {} \;

Es wandelt Zeilenumbrüche in Leerzeichen um, ersetzt dann :durch ., ändert dann \|durch -, entfernt dann <>"?*, löscht dann Leerzeichen am Ende des Dateinamens und macht dann dasselbe mit Leerzeichen am Anfang.

verwandte Informationen