2011-07-25 11 views
1

私はフォルダのコレクションを持っており、フォルダ名のすべてのアンダースコアをスペースで置き換えたいと思います。Unixバッチリネームフォルダ(アンダースコアからスペース)

アイデア?

おかげ

+1

本当ですか?ファイル名のスペースはいくつかの面倒を引き起こす可能性があります。 Unixはそれらをうまくサポートしています。 –

+0

クローサーに:これはSOのための適切な質問です - それは特定のタスクを行うためのシェルスクリプト(プログラム)を書く方法を尋ねています。あなたが別の質問の複製としてそれを閉じていたなら、あなたは私からもっと同情を得るでしょう。 –

+0

私は実際にGoogleでこれと反対の仕事を探していました(スペースはアンダースコアになります)。 – VMDX

答えて

2

(bashの)これは名前に下線を持つカレントディレクトリ内または下にあるすべてのフォルダを見つけて、あなたが言及ように名前を変更します:

for d in $(find . -name '*_*' -type d) ; do 
    new=$(echo $d | sed -e 's/_/ /g') 
    mv $d $new 
done 
+0

私は$ dと$ newを引用符で囲んでいました。ありがとうございました。 – user860778

0

あなたは

ような何かを試みることができます
#> ls -l | grep '^d' | awk '{oldname = $9 ; gsub(/_/, " " ,$9); print "mv " oldname " " $9 }' > temp.script 
#> chmod 744 temp.script 
#> ./temp.script 

最初にテストしてください:)

0

システムには、 renameコマンドが必要ですか?いくつかのシステムでは、それが存在し、いくつかの種の正規表現を使用して変更を加えることができます。私は(つまりPerlスクリプト、)Perlの正規表現を使用するバージョンを使用します。一方

find . -type f -name '*_*' -print0 | xargs -0 rename 's/_+/ /g' 

を、Linuxの標準バージョンでは、比較することによって、むしろ微弱になりがち(と何をしないだろうあなたが必要です)。

ディレクトリの名前を変更する場合は、ファイルの名前を変更する前に、またはすべてのファイルの名前を変更してから、ディレクトリの名前を変更することをお勧めします。それらを混在させると、あるディレクトリにあるファイル名にアクセスする際に名前の変更に問題が生じるが、ファイル名が生成されてからディレクトリの名前が変更されたことになります。 findのオプションとして-depthを使用しても、安全であるとは限りません。

関連する問題