2011-03-22 21 views

答えて

7
find . -type f -name '*.a' -print0 | xargs -0 -IZZ mv ZZ ZZ.b 

:(ファイル用などまたは使用**/**/*/**/*/*/*、)

1

<files>の名前をrename 's/\.a$/.a.b/' <files>に変更します。これを再帰的に行うと、ちょっとループが掛かります。これは、スペースおよび/または改行を含むファイル名を処理する必要があり

for file in `find . -name '*.a'`; do mv $file $file.b; done 
+0

bashの4場合は、 'shopt -s globstar'と'申し訳ありません** ' –

1

以下のスクリプトを試してみてください。また、ディレクトリの名前を変更しません(findを実行する他の解決策もあります)。あなたはそれが大文字と小文字を区別しないようにしたい場合は、代わりに "-name"

+3

を使用していますが、それは正しくファイル名にスペースや改行を処理しません - あなたは-print0とxargsのを使用しようとする場合があります - 0を代わりに使用します。 – George

+0

または:を見つける。 -name '* .a' |一方、-r xを読み込みます。 mv "$ x" "$ x.b"を実行します。 done –

2

ルビー(1.9+)シェルスクリプト(少なくともバッシュ4)

$ ruby -e 'Dir["**/*.a"].each{|x|File.file?x && File.rename(x,"#{x}.b")}' 

の "-iname" を使用

shopt -s globstar 
shopt -s nullglob 
for file in **/*.a 
do 
echo mv "${file}" "${file}.b" 
done 
+0

申し訳ありませんが、私のブラウザは以前は別の答えを表示していたようです。私が今見ているバージョンは間違いなく再帰的です。これはまた素晴らしい解決策のようです! –

関連する問題