Rename
簡化複雜的音樂文件名
我有一個很大的音樂文件目錄,其標題遵循以下格式:
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
)都安裝在我的系統上。
您可以使用 (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
使用循環
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
命令已被註釋,如果您對 echo 顯示的內容感到滿意,請取消註釋並執行。