ハワイから来たアロハ、
私はすべてが大丈夫であることを願っています。端末で、オーディオファイル拡張子.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' *