ファイル名の特殊文字名を下線で置き換えます。

ファイル名の特殊文字名を下線で置き換えます。

文字、数字、ダッシュ、ドット、またはアンダースコア以外のすべての文字をディレクトリのファイル名からアンダースコアに変更しようとしています。

ls *.mp3 | sed 's/[^0-9a-zA-Z._-]/_/g'

結果のみを表示することを除いて機能し、実際に名前を変更することはありません。名前を変更するにはどうすればよいですか?

ベストアンサー1

Lを解析しないでください。。それはうまくいくようですが、複雑な場合は失敗する可能性があります。

とともにBashのパラメータ拡張:

for f in *.mp3; do mv -- "$f" "${f//[!0-9a-zA-Z.-]/_}"; done

名前変更:

rename -- 's/[^0-9a-zA-Z.-]/_/g' *.mp3

標準のPOSIXツールのみがあり、ファイル名に改行文字がないと仮定すると、

for f in *.mp3; do 
    mv -- "$f" "$(printf '%s\n' "$f" | sed 's/[^0-9a-zA-Z.-]/_/g')"
done

おすすめ記事