전체 폴더 내용 이름 바꾸기

전체 폴더 내용 이름 바꾸기

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

관련 정보