내 디렉터리에 다음 파일 이름을 가진 파일이 있습니다.
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
이해합니다?