次の名前のファイルを含む入れ子になったディレクトリを持つサブディレクトリがたくさんあります。
output.txt
。これらすべてのファイルの名前を次のように変更したいと思います。
output_modified.txt
頑張った
find . -type f -name "output.txt" -execdir rename 's/output\.txt/output_modified\.txt/' '{}' \;
しかし、エラーが発生します。
rename: not enough arguments
私が逃した議論はありますか?それとも必要なことを行うより良い方法はありますか?
ベストアンサー1
必要ありませんrename
。次のようにしてください。
find . -name output.txt -type f -execdir mv -T output.txt output_modified.txt ';'
これは-T
GNU拡張です。これがなければ、名前付きディレクトリがすでに存在する場合は名前をにmv output.txt output_modified.txt
変更できますoutput.txt
。output_modified.txt/output.txt
output_modified.txt
rename
一度に複数のファイルの名前を変更できるため、ファイルごとに1つずつ呼び出すよりも効率的であるため、ここで役に立ちますが、mv
次のものが必要です。
到着
rename
あなたがPerlベースであることを確認してください、ゲームの馬鹿ではありませんutil-linux
。時にはfile-rename
またはprename
またはとも呼ばれますperl-rename
。次のように呼び出します。
find . -name output.txt -type f -exec rename ' s|\.txt\z|_modified.txt|' {} +
この{} +
形式では、find
複数の to が一度に渡されますrename
。
一部のPerlベースのバリアントでは、rename
ファイルのリストを使用して標準入力のNULL区切り文字の名前を変更することもできます。
find . -name output.txt -type f -print0 |
rename -0 's|\.txt\z|_modified.txt|'