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
구문이 다른 두 가지 공통 명령이 있습니다 . 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
당신은 또한 볼 수 있습니다
답변2
작은따옴표는 확장을 중지합니다. {}를 이스케이프해야 할 수도 있습니다. 대신 다음을 수행하세요.
find . -type f -name 'botrytis_cinerea_T12345.*' -exec rename "s/botrytis_cinerea_T12345/$i/g" \{\} \;