[Linux Shell] ファイル名のスペースをアンダースコアに変換する方法

"My Report 2007 10 27.txt" を "My_Report_2007_10_27.txt" に変換/リネームする方法。

WindowsやMac, さらには近頃ではLinuxユーザーまでもが、ファイル名にスペースを使用している。たしかに読みやすくて、GUIで使ってる分には全く問題ないのだけれども、シェルで一括操作などを行いたい時ににちょっと面倒臭い。なぜなら、シェルで(半角)スペースを持つファイル名を扱うには、\でエスケープしたり、気づかずxargsに渡してしまい、変な挙動になったりと、色々回り道をしないといけないことが多い。

半角スペースを "_" (アンダースコア) に置換してmvする。
ディレクトリ下のファイル全部。

$ for file in *; do mv "$file" `echo $file | tr ' ' '_'`; done

もちろん、
for file in *; の*を変えると適応範囲が絞りこめる。
例えば、 for file in *.wma; <- Windows Media Playerはスペースが大好きです。

関連エントリー:bashとsedを使ってファイルの拡張子を一括置換する

コメント

人気の投稿