디렉토리의 모든 파일 이름을 숫자로 변경

디렉토리의 모든 파일 이름을 숫자로 변경

내 디렉터리에 다음 파일 이름을 가진 파일이 있습니다.

01 ABC DEF.m4a
02 DEF ABC.m4a
etc...

나는 이것을 다음으로 변환하고 싶습니다.

1.m4a
2.m4a
etc...

명령줄을 사용하여 이 작업을 어떻게 수행할 수 있나요?

답변1

Perl 버전 rename(때때로 라고 함 prename)이 있는 경우 이를 사용할 수 있습니다.

rename -n 's/^0*(\d+).*(\.m4a)\z/$1$2/s' [0-9]*.m4a

만족스러우면 원하는 대로 작동할 것입니다. 플래그를 제거하세요 -n.

이는 정규식 일치를 사용합니다.

  • ^- 시작하려면 테마가 필요합니다.
  • 0*- 0개 이상의 "0"과 일치합니다.
  • (\d+)- 성냥그리고 기억해하나 이상의 소수점 이하 자릿수
  • .*- 모든 것을 일치시킬 때까지...
  • (\.m4a)- 성냥그리고 기억해 텍스트 ".m4a"
  • \z- 주제 끝이 필요합니다¶
  • s플래그 - .모든 바이트가 일치하는지 확인합니다(개행 포함, 파일 이름에도 유효함).

$1그런 다음 및 를 사용하여 $2대괄호 표현식의 값을 참조합니다.


여기서는 1이 꼭 필요한 것은 아닙니다. 쉘이 인수로 지정한 파일 이름은 모두 로 끝나고 .m4a이전 파일 이름은 .*탐욕스럽기 때문입니다. $여기에서도 작동할 수 있지만 rename파일 이름(개행 문자를 포함하여 0이 아닌 바이트 시퀀스일 수 있음)에 대해 작동합니다. 예 를 들어 제목 끝에서 일치하는 \z것이 좋습니다 .$\z앞으로마지막 개행 문자입니다.

답변2

어쩌다

for FN in *.m4a; do mv -i "$FN" "${FN%% *}.m4a"; done

이해합니다?

관련 정보