os x ファイル名からスラッシュを削除する

os x ファイル名からスラッシュを削除する

こんにちは。すべてのファイルからスラッシュをすべて削除したいのですが、メイン ディレクトリ内のすべてのディレクトリに対してこれを再帰的に実行します。

再帰的に動作しないこのスクリプトをどのように変更する必要がありますか?

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

または、ファイル名のスラッシュのみを置き換えたいのですが、メイン フォルダー内のすべてのサブフォルダーに対してこれを実行したいですか?

マックスに挨拶

答え1

BSD レイヤーでは、スラッシュがパス区切り文字です。スラッシュを含むファイル名に遭遇すると、カーネルはスラッシュ (-) を/コロン (-) に変換します:。そのため、ファインダー アプリケーションでのファイル名は のように見えますfoo/barが、BSD レイヤーでは のように見えますfoo:bar

したがって、ディレクトリ ツリーを移動するには、 を使用して、ファイル名にfindが含まれるファイルを検索します:。次に、 を含むインライン スクリプトを使用して、-execdirファイル名からコロン (Finder アプリケーションではスラッシュ) を削除します。

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

mvこれにより、コマンドとオペランドのみがリストされます。出力で希望する結果が得られると思われる場合は、 を削除しますecho

関連情報