複数のサブディレクトリのファイル名を変更するには?

複数のサブディレクトリのファイル名を変更するには?

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として呼び出されます。perluse strict"old_file_name"new_file_namefind

ここでは、次のことができます。

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 {} +

おすすめ記事