[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を使ってファイルの拡張子を一括置換する
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を使ってファイルの拡張子を一括置換する
コメント