복잡한 음악 파일 이름을 단순화하세요

복잡한 음악 파일 이름을 단순화하세요

제목이 다음 형식을 따르는 대규모 음악 파일 디렉토리가 있습니다.

Title_stringOfNumbers - Artist.mp3

내 목표는 밑줄과 숫자를 제거하고 아티스트 이름을 제목으로 바꾸는 것입니다.

예를 들어 원본 파일 이름은 다음과 같습니다.

whats up_7979841261 - randomArtist.mp3

내가 원하는 파일 이름:

randomArtist - whats up.mp3

'제목에는 특수 문자( , !, , ., _, (, 심지어 일본어 문자까지)와 숫자가 포함될 수 있지만 )파일 이름의 첫 번째 부분에서는 밑줄 문자와 숫자가 서로 옆에 있어서는 안 됩니다(따라서 유사한 파일은 존재하지 않습니다)./\multiple word title_2_6878492178471289 - artist.mp3

rename지금까지 터미널에서 명령을 사용하여 밑줄을 제거하려고 시도했지만 이 줄은 아무 작업도 수행하지 않고 사용에 익숙하지 않기 때문에 문제가 발생했습니다.

rename 'y/_//' *

이것은 모두 POP!_OS 21.10을 사용하므로 Ubuntu에서 작동하는 모든 것이 내 시스템에서도 작동해야 합니다. 저는 Perl 스크립트를 사용했습니다 rename(함께 설치됨 sudo apt install rename). 그러나 내가 찾은세 가지 변형 모두( rename, prename, file-rename)이 내 시스템에 설치되었습니다.

답변1

(Perl)을 사용할 수 있습니다 rename.

rename -n 's/^(.*)(_\d+) - (.*)\.mp3$/$3 - $1.mp3/' *.mp3

-n결과가 양호하면 삭제하여 실제로 작업을 실행하세요.


파일에 올바른 태그가 있으면 id3다음 태그를 사용하여 이름을 바꾸는 것이 좋습니다.

예를 들어 mp3rename또는exiftool

sudo apt install mp3rename
mp3rename -s '&a - &t'
mp3rename *.mp3

답변2

루프 mv및 매개변수 대체 사용:

for i in *.mp3; do
  a="${i##* - }" # randomArtist.mp3
  n="${i%% - *}" # whats up_7979841261
  t="${a%%.*} - ${n//_[0-9]*/}.mp3" # randomArtist - whats up.mp3
  echo mv -- "$i" "$t" # mv -- randomArtist - whats up.mp3 → whats up - randomArtist.mp3
  # mv -- "$i" "$t"
done

좋은 아이디어를 적용하기 전에 백업을 만들어 두세요. 실제 mv명령은 주석 처리되어 있습니다. 에코가 표시하는 내용에 만족하면 주석 처리를 해제하고 실행하십시오.

관련 정보