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