OS X: Schrägstrich aus Dateinamen entfernen

OS X: Schrägstrich aus Dateinamen entfernen

Hallo, ich möchte alle Schrägstriche aus allen meinen Dateien entfernen, dies aber rekursiv für jedes Verzeichnis in einem Hauptverzeichnis tun.

Wie muss ich dieses Skript ändern, das nicht rekursiv arbeitet?

for f in "$1"/*; do
dir="$(dirname "$f")"
file="$(basename "$f")"
mv -- "$f" "${dir}/${file//[^_-0-9A-Za-z.]}"
done

oder besser, ich möchte nur einen Schrägstrich in Dateinamen ersetzen, dies aber für jeden Unterordner im Hauptordner?

Gruß Max

Antwort1

In der BSD-Schicht ist ein Schrägstrich das Pfadtrennzeichen. Wenn Sie auf einen Dateinamen mit einem Schrägstrich stoßen, übersetzt der Kernel den Schrägstrich- /in einen Doppelpunkt- :. Ein Dateiname in der Finder-Anwendung kann also so aussehen, foo/barin der BSD-Schicht sieht er jedoch so aus foo:bar.

Um den Verzeichnisbaum zu durchsuchen, verwenden Sie , findum Dateien mit :im Namen zu suchen. Verwenden Sie dann ein Inline-Skript mit , -execdirum die Doppelpunkte (Schrägstriche in der Finder-Anwendung) aus den Dateinamen zu entfernen.

find . -type f -name '*:*' -execdir bash -c ' for file
    do
        echo mv -- "${file}" "${file//:}"
    done' sh {} \;

Dadurch werden nur der Befehl und die Operanden aufgelistet mv. Wenn Sie der Meinung sind, dass die Ausgabe die gewünschten Ergebnisse liefert, entfernen Sie die echo.

verwandte Informationen