3つのサブディレクトリがあるとしましょう。すべて.というファイルが含まれていますold_file_name
。今1つのコマンドで名前をすべてnew_file_name
。
頑張った
sudo find . -name "old_file_name" -exec rename old_file_name new_file_name {} \;
ただし、次のエラーが表示されます。
'strict subs' (ユーザー提供コードで) を使用する場合、デフォルトの単語 'new_file_name' は使用できません。
ベストアンサー1
perl
このバリアントは、最初にファイル名とファイルリストを変換するrename
いくつかのコードを引数として使用します。perl
あなたの試みで(コードrenameのファイル引数として見つかったファイルを使用しても効果はありません)、同じように扱われ、これは意味がありません。そうでない場合old_file_name
として呼び出されます。perl
use strict
"old_file_name"
new_file_name
find
ここでは、次のことができます。
find . -depth -name old_file_name -execdir mv old_file_name new_file_name \;
-execdir
標準ではありませんが、かなり一般的です。対照的に-exec
、プロセスの現在の作業ディレクトリではなく、選択した各ファイルの親ディレクトリでコマンドを実行しますfind
。
いいえ-execdir
、次のようにできます。
find . -depth -name old_file_name -exec sh -c '
for file do
mv "$file" "${file%/*}/new_file_name"
done' sh {} +