ファイル拡張子.mp3の前に数字を増やす方法

ファイル拡張子.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

端末でどうするか教えてください。ありがとうございます!

ベストアンサー1

このような:

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
    ...

最初はすべてのシェルで動作しますが、ソート順に影響しますが、後者はBashで動作します。 (kshでも有効で、zshでshopt使用したり使用したりする必要はありません*.(mp3|aiff|m4a|wav)。)


Perlツール、乱用、およびrename変数の特別な状態を使用すると、同様の効果が得られます(ただし、複数の点がある場合は最初の点を置き換えますが)。$a$b

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

おすすめ記事