2017-03-19 6 views
0

私はこの問題に何度も遭遇しましたが、それを解決できるかどうかわからないコマンドラインのメカニックがあるかどうか不思議です。ファイル名のバッチパターン置換

名前のファイル名を別のものに変更して、名前を変更したいファイルがあるとしましょう。

名前の変更:

foo_a.png 
foo_b.png 
foo_c.png 

へ:単一のコマンドラインではなく、スクリプト内の

bar_a.png 
bar_b.png 
bar_c.png 

。以下は


私はそれがこれに近づく知っていることについていくつか説明しています。

私は、それらのファイルを別のフォーマットに変換するなど、それらのファイルを便利に反復する方法を知っています。

find . -name "foo*png" |xargs -I G mv G bar_G 

これは、古いファイル名を新しいファイル名の一部として再利用するため、実際には不正です。


答えに使用するコマンドの詳細を記してください。

+1

http://man7.org/linux/man-pages/man1/rename.1.html – jm666

答えて

1

@ jm666はあなたがリネームを使うことができるとコメントしました。それを打つことはできません。ライン:私はあなたが

rename foo bar foo*png 

EDITのために行くだろうと思い
あなたが手でこれを行うともIYで改行を含むファイル名をサポートしたい場合は、手でこれを書くことが

find . -name foo\*png -print0 2>/dev/null | 
xargs -0 -I G bash -c 'newfile=$(sed 's/foo/bar/' <<< "G") ; mv "G" "${newfile}"' 

になりますにfindはコードとしてフォーマットされていませんでした。 および 説明find print0 + xargs -0(またはxargs -null): ファイル名にはスペースと改行を使用できます。改行でファイル名を扱いたいときは、findの出力を1行ずつ解析することはできません。
例:

touch "an 
> example" 
find . -name an\* | xargs -I G echo "==G==" 
==./an== 
==example== 
find . -name an\* -print0 | xargs -0 -I G echo "==G==" 
==./an 
example== 
+0

'何を-0'ん? "名前の変更"の必要性は実際には一種の例でした。問題では、他のユースケース(バッチを別の形式に変換するなど)に再利用できる非常に汎用的なソリューションが用意されています。ありがとう! – AsTeR

+1

'-0':更新された回答を参照してください。 –

関連する問題