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