다음을 사용하여 이미지 파일의 이름을 재귀적으로 바꾸려고 합니다.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" \;