하와이에서 온 알로하,
나는 모든 것이 괜찮아 지길 바란다. 터미널에서 오디오 파일 확장자 .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' *