Ich brauche ein Automator-Skript, das alle Dateien mit illegalen Windows-Zeichen wie findet <>:/\\|?*
und diese Zeichen durch einen Unterstrich ersetzt. Der Rest des Dateinamens sollte unverändert bleiben.
Alternativ würde ich ein Terminalskript verwenden. Ich weiß, wie ich sie mit finden kann find . -name "*[<>:/\\|?*]*"
, aber ich weiß nicht, wie ich die Namen richtig ändern kann.
Wie mache ich das?
Ich habe einen Bash -Einzeiler gefunden , der jede Datei und jeden Ordner mit ungültigen Zeichen im Namen findet und die Datei/den Ordner umbenennt, wobei jedes ungültige Zeichen in einen Bindestrich geändert wird:
find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y=$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x") && mv -n "$x" "$y" ' \;
Es ist möglich, dass eine Datei einen illegalen Namen hat, der auf genau den gleichen legalen Namen wie eine andere illegal benannte Datei korrigiert würde (Beispiel: zwei Dateien mit dem Namen "fle"). Der obige Einzeiler ändert nicht den Namen der zweiten (oder weiteren) illegal benannten Datei, die auf den gleichen Namen wie die erste korrigiert würde. Das bedeutet, dass Sie nach den Einzeilern möglicherweise immer noch einige illegal benannte Dateien haben. Nachdem Sie diesen Einzeiler ausgeführt haben, führen Sie aus
find . -name "*[<>:\\|?*]*"
erneut, um illegal benannte Dateien zu identifizieren, die noch vorhanden sind. Eine Möglichkeit, mit dieser Situation umzugehen, besteht darin, den Gedankenstrich in der sed-Ersetzung durch ein anderes Zeichen zu ersetzen, z. B. einen Unterstrich, und den Einzeiler erneut auszuführen.
Fahrrad
WegZurTür