2017-08-13 9 views
2

".mp4"で終わるすべてのファイルの名前を、空白の代わりにアンダースコアを含むように変更したいとします。 例:-execを使用してすべてのファイルを検索して名前を変更する方法

Original file -> test 1.mp4 
Renamed file -> test_1.mp4 

私がしようとしていた:

find . -iname "*.mp4" -exec mv {} $(echo '{}' | tr " " "_") \; 

しかし、私は唯一だ:

mv: ‘./test 1.mp4’ and ‘./test 1.mp4’ are the same file 

を私のパイプはworking.Iはすべてのアイデアをいただければ幸いではないようです。

+0

を見つける 'てみてください。ここでは

は働いていたコマンドです。 -iname "* .mp4" -exec mv "{}" $(echo '{}' | tr "" "_")\; '幸いです。 – shellter

答えて

0

コマンドの名前を変更して使用することをお勧めします。 https://packages.debian.org/rename

あなたがサブディレクトリで検索する必要がない場合:Debianに

rename 's/\ /_/' *.mp4

そうした場合:

find . -iname "*.mp4" -execdir rename 's/\ /_/' {} \;

複数のスペースを交換しなければならない場合は、検索を置換式は's/\ /_/g'

構文/アプローチを本当に残しておきたい場合は、この非常によく似た質問を参照してください。find -exec with multiple commands

+0

検索が再帰的になるため、「検索」方法がより適切であるはずですが、エラーが発生します。 [コード] $ find。 -iname "* .mp4" -exec rename 's/\/_ /' {} \; rename:引数が不十分です[/ code] – hunter86bg

+0

エラーを再現できませんでした。私はあなたのディストリビューション(それはどちらですか?)には、 "名前を変更"する答えとは異なるコマンドがあると仮定しています。しかし、私のテストでは、名前にスペースが含まれているディレクトリに出会うと、再帰的な答えが失敗する(別のエラーで)ことがわかりました。私はその答えのその部分を削除しました。 – jmr

+0

ディストリビューションはCentOS 7です。確かに "名前変更"はありますが、私はそれをうまく機能させることができませんでした。 – hunter86bg

0

"rename"コマンドを使用する方法はこれまで通りです。

find /tmp/test/ -iname "*.mp4" -exec rename " " "_" "{}" \; 
+0

これは、最初のスペース文字であり、すべてを置き換えるには複数回再実行する必要があります。 – hunter86bg

関連する問題