터미널 및 정규식을 사용하여 파일 이름의 선행 숫자를 제거하여 이름 바꾸기

터미널 및 정규식을 사용하여 파일 이름의 선행 숫자를 제거하여 이름 바꾸기

일련번호를 제거하여 다음 파일의 이름을 바꾸고 싶습니다.

01 X.mp3도착하다X.mp3

02 Add Me In.mp3도착하다Add Me In.mp3

아래 이름 바꾸기 명령을 사용하려고합니다.

rename -v -n 's/^\d+\s*([a-z]+\.mp3)$/$1\.mp3/' *.mp3

이 명령을 실행하면 다음 오류가 발생합니다.

Using expression: sub { use feature ':5.18'; s/^\d+\s*([a-z]+\.mp3)$/$1\.mp3/ }

답변1

왜 이런 오류가 발생하는지 이해가 되지 않습니다. 사실, 표시된 것보다 더 많은 오류 줄이 있다고 확신합니다. 우선 실제 오류 메시지는 없습니다.

그러나 해당 정규식은 실제로 샘플 파일과 일치하지 않습니다. 사용 중인 것은 [a-z]+\.mp3소문자만 일치하며 확장자는 항상 일치하므로 이름에 다음이 포함된 파일만 일치합니다.오직제거할 숫자와 공백 뒤에 나오는 소문자입니다. match [a-zA-Z]또는 use를 사용 s///i하면 일치 항목에서 대소문자를 구분하지 않을 수 있지만 나머지 단어는 전혀 일치하지 않는 것이 좋습니다. 처음부터 숫자와 공백만 제거하고 싶으므로 일치시키세요.

rename -vn 's/^\d+\s+//' *mp3

답변2

솔루션 활용매개변수 확장

for i in *.mp3 ; do mv "$i" "${i#"${i%%[!0-9 ]*}"}" ; done
  • ${i%%[!0-9 ]*}숫자/공백이 아닌 첫 번째 문자부터 끝까지 삭제합니다.
  • 나머지 문자는 변수에 전달된 ${i#다음 i변수의 시작 부분에서 제거되어 시작 숫자와 공백 없이 원하는 파일 이름이 생성됩니다.

답변3

제거하면 -n작동됩니다. -n"결과를 변경하는 대신 결과만 인쇄한다"는 뜻입니다.

관련 정보