Filenames

如何在文件副檔名 .mp3 之前添加遞增數字

  • August 16, 2022

來自夏威夷的阿羅哈,

我希望一切都好。在終端中,我試圖使音頻文件副檔名 .mp3、.wav、.m4p、.aiff、.m4a 的所有文件名都是唯一的。我有成千上萬個,所以為了做到這一點,我需要在它們的文件副檔名之前添加額外的遞增數字。文件名應保留。

例如:snoopdog.mp3、music2010.wav、stackexchange.aiff、youtubemusic.mp3、facebookmusic.m4a、twittermusic.aiff

最終結果:snoopdog1.mp3、music20102.wav、stackexchange3.aiff、youtubemusic4.mp3、facebookmusic5.m4a、twittermusic6.aiff

請如何在終端中執行此操作。謝謝!

像這樣的東西:

i=1
for file in ./*; do
   ext=${file##*.}
   basename=${file%.*}
   mv -n -- "$file" "$basename$i.$ext"
   i=$((i+1))
done

會給你facebookmusic1.m4a music20102.wav snoopdog3.mp3 stackexchange4.aiff twittermusic5.aiff youtubemusic6.mp3。排序來自預設的字典排序,因此字母f排在第一位等。

這將重命名目前目錄中的所有文件,但如果您只想更改具有該表達式的文件,您可以執行以下任一操作

for file in *.mp3 *.aiff *.m4a *.wav; do
   if [ -f "$file" ]; then
       ...
   fi
done

或者

shopt -s extglob
for file in *.@(mp3|aiff|m4a|wav); do
   ...

其中第一個應該在所有 shell 中工作,但會影響排序順序,而後者將在 Bash 中工作。(在 ksh 中同樣有效,不需要shopt, 或*.(mp3|aiff|m4a|wav)在 zsh 中使用。)


使用 Perlrename工具,濫用$a$b變數的特殊狀態,您可以這樣做以達到類似的效果(儘管如果有多個,這將在第一個點處替換):

rename -v 's/\./ ++$a . "." /e' *

引用自:https://unix.stackexchange.com/questions/713838