ディレクトリ名に基づいてファイル名を変更する

ディレクトリ名に基づいてファイル名を変更する
for i in L*;
do
cd $i
find . -type f -name 'botrytis_cinerea_T12345.*' -exec rename 's/botrytis_cinerea_T12345/"$i"/g' {} \;
done

エラーが発生しました。

find: missing argument to `-exec' rename: not enough arguments

Usage:  rename [options] expression replacement file...

Options:  -v, --verbose    explain what is being done  -s, --symlink   act on symlink target

 -h, --help     display this help and exit  -V, --version  output version information and exit

For more details see rename(1).

ベストアンサー1

rename構文の異なる2つの共通コマンドがあります。 Perl式を受け入れるバージョン用に書かれたスクリプトを使用しています。

rename s/expression/replacement/g file...

ただし、インストールしたバージョンは正規表現と置換文字列の両方を受け入れるバージョンです。表示されるエラーメッセージは次のとおりです。

rename [options] expression replacement file...

\;(代わりに使用したラッキーまたはスマートだと思います。)コマンドを+調整してfindこの問題を解決できます。

find . -type f -name 'botrytis_cinerea_T12345.*' -exec rename botrytis_cinerea_T12345 "$i" {} \;

Kusalanandaがコメントで指摘したように、ループ内にあるが元のcdディレクトリに戻ることはないので、最初の繰り返し以降のすべての繰り返しでは存在しないcdディレクトリに繰り返しアクセスしようとしています。cdその後、別のタスクを実行してこの問題を解決しようとするかもしれませんが、findおそらく自分自身を調整してこの問題を避けたいと思いますfind

for i in L*; do
    find "$i" -type f -name 'botrytis_cinerea_T12345.*' -exec rename botrytis_cinerea_T12345 "$i" {} \;
done

また、見ることができます

おすすめ記事