Filenames
如何在文件副檔名 .mp3 之前添加遞增數字
來自夏威夷的阿羅哈,
我希望一切都好。在終端中,我試圖使音頻文件副檔名 .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 中使用。)使用 Perl
rename
工具,濫用$a
和$b
變數的特殊狀態,您可以這樣做以達到類似的效果(儘管如果有多個,這將在第一個點處替換):rename -v 's/\./ ++$a . "." /e' *