전체 폴더 내용 이름 바꾸기

전체 폴더 내용 이름 바꾸기

저는 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

(S01e01, S01e02가 있어야 했지만 각 문장의 시작 부분에 추가 S01e가 있습니다.....)

해당 파일을 그렇게 보이도록 하려면 어떻게 제거하거나 이름을 바꿀 수 있습니까?:

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자리로 만들었습니다.

이는 단지 명령을 stdout으로 인쇄하므로 출력이 마음에 드는지 확인할 수 있습니다. 실제로 이름을 바꾸려면 4행에서 선행 "echo"를 제거하십시오.

답변2

episode=1
for x in s01e*; do
  mv "$x" "s01e$episode ${x#s01e}"
  episode=$((episode+1))
done

에피소드가 10개 이상인 경우 최대 9까지의 숫자에 앞에 0을 두는 것이 좋습니다. 이를 위한 쉬운 방법은 100~199 범위의 숫자를 생성하고 앞의 1자리를 잘라내는 것입니다.

episode=101
for x in s01e*; do
  mv "$x" "s01e${episode#1} ${x#s01e}"
  episode=$((episode+1))
done

관련 정보