제목이 다음 형식을 따르는 대규모 음악 파일 디렉토리가 있습니다.
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
명령은 주석 처리되어 있습니다. 에코가 표시하는 내용에 만족하면 주석 처리를 해제하고 실행하십시오.