OSX 10.9.2(BASH 3.5)를 사용하고 있는데 전체 폴더 콘텐츠 이름을 바꾸고 싶습니다. 그래서 스크립트를 실행했는데 결과는 다음과 같았습니다.
s01eDavid.Letterman.2014.02.27.Stupid.Human.Tricks.x264-SWOLLED.mp4
s01eDavid.Letterman.2014.03.07.Lenny.Marcus.HDTV.x264-BATV.mp4
s01eDavid.Letterman.2014.03.24.Jimmy.Carter.HDTV.x264-SWOLLED.mp4
s01eDavid.Letterman.2014.03.25.Emma.Watson.720p.HDTV.x264-SWOLLED.mkv
(각 문장의 시작 부분에 중복된 S01e가 있는데, S01e01, S01e02가 있어야 하는데...)
이 파일을 다음과 같이 삭제하거나 이름을 바꾸려면 어떻게 해야 합니까? :
s01e1 David.Letterman.2014.02.27.Stupid.Human.Tricks.x264-SWOLLED.mp4
s01e2 David.Letterman.2014.03.07.Lenny.Marcus.HDTV.x264-BATV.mp4
s01e3 David.Letterman.2014.03.24.Jimmy.Carter.HDTV.x264-SWOLLED.mp4
s01e4 David.Letterman.2014.03.25.Emma.Watson.720p.HDTV.x264-SWOLLED.mkv
감사해요!
답변1
awk
해결책이 아닙니다 :
cnt=1
for f in *; do
fcnt=$(printf "%02d" $cnt)
echo mv "$f" "$(echo $f | sed -e "s/^s01e/&$fcnt /")"
cnt=$(($cnt+1));
done
printf 명령을 사용하여 에피소드 번호를 2자리로 설정했습니다.
이는 명령을 표준 출력으로 인쇄하므로 출력이 마음에 드는지 확인할 수 있습니다. 실제로 이름을 바꾸려면 4행에서 선행 "echo"를 제거하십시오.
답변2
episode=1
for x in s01e*; do
mv "$x" "s01e$episode ${x#s01e}"
episode=$((episode+1))
done
에피소드가 10개 이상인 경우 앞에 0이 붙은 최대 9개의 숫자를 선호할 수 있습니다. 간단한 방법은 100-199 범위의 숫자를 생성하고 앞의 1자리를 잘라내는 것입니다.
episode=101
for x in s01e*; do
mv "$x" "s01e${episode#1} ${x#s01e}"
episode=$((episode+1))
done