찾기를 사용하여 파일 이름을 바꿀 때 바꾸는 오류가 발생했습니다.

찾기를 사용하여 파일 이름을 바꿀 때 바꾸는 오류가 발생했습니다.

다음을 사용하여 이미지 파일의 이름을 재귀적으로 바꾸려고 합니다.find주문하다.

현재 명령은 다음과 같이 작성됩니다.

$ find . -name '*.jpg' -exec rename "${echo $(uuidgen) | cut -c1-8}.jpg" '{}' \;

오류는 다음과 같습니다.

bash: ${echo $(uuidgen) | cut -c1-8}.jpg:잘못된 대체

{}다양한 조합의 사용법 을 시도했지만 ()아무것도 작동하지 않는 것 같습니다. 단독으로 실행 하면 echo $(uuidgen) | cut -c1-8올바른 결과가 나오므로 이미지 이름에 이 문자열을 삽입하기만 하면 됩니다.

다음과 같이 교체하면 :

$ find . -name '*.jpg' -exec rename "$(echo $(uuidgen) | cut -c1-8).jpg" '{}' \;

명령 오류는 다음과 같습니다.

(평가 1)의 라인 1에서 "strict subs"를 사용할 때는 "jpg"라는 단어만 사용할 수 없습니다.

이러한 문제를 어떻게 해결할 수 있습니까?

당신의 도움을 주셔서 감사합니다!

답변1

에 따르면 man rename:

요약

이름 바꾸기 [ -v ] [ -n ] [ -f ] perlexpr [ 파일 ]

설명하다

"rename"은 첫 번째 인수에 지정된 규칙에 따라 제공된 파일 이름을 바꿉니다. perlexpr 매개변수는 파일 이름을 지정하는 Perl의 $_ 문자열 중 적어도 일부를 수정할 것으로 예상되는 Perl 표현식입니다. 주어진 파일 이름이 표현식에 의해 수정되지 않으면 이름이 바뀌지 않습니다. 명령줄에 파일 이름이 지정되지 않으면 표준 입력에서 파일 이름을 읽습니다.

따라서 첫 번째 매개변수는 정규식입니다. 첫 번째 매개변수를 모든 문자열과 일치하는 정규식으로 변경하고 다음으로 바꿔야 합니다.$(echo $(uuidgen) | cut -c1-8).jpg

find . -name '*.jpg' -exec rename 's/.*/$(echo $(uuidgen) | cut -c1-8).jpg/' '{}' \;

답변2

mv그냥 사용하세요 rename.

find . -name '*.jpg' -exec mv '{}' "$(echo $(uuidgen) | cut -c1-8).jpg"  \;

관련 정보