TV 시리즈 일괄 이름 바꾸기

TV 시리즈 일괄 이름 바꾸기

내 iTunes 라이브러리는 NAS(WD MyCloud 4TB)에 있으며 일반적으로 iTunes 라이브러리별로 정리된 많은 TV 시리즈가 있습니다.

"TV 쇼" 폴더:

TV Show 1

|------------- Series 1
               |-----------01 Episode Name.m4v
               |-----------02 Episode Name.m4v
               |...
|------------- Series 2
               |-----------01 Episode Name.m4v
               |...
|...
TV Show 2
|------------- Series 1
               |-----------01 Episode Name.m4v
               |-----------02 Episode Name.m4v
               |...
|------------- Series 2
               |-----------01 Episode Name.m4v
               |...
|...

전체 TV 폴더를 Infuse라는 다른 폴더에 하드 링크했습니다. 이 폴더는 내 Apple TV의 Infuse 앱에서 읽을 수 있으므로(iTunes를 영구적으로 여는 컴퓨터를 우회할 수 있음) 하드 링크된 모든 파일의 이름을 다음과 같이 바꿔야 합니다.

TV Show 1
|------------- Series 1
               |-----------TV Show 1 - S0101 Episode Name.m4v
               |-----------TV Show 1 - S0102 Episode Name.m4v
               |...
|------------- Series 2
               |-----------TV Show 1 - S0201 Episode Name.m4v
               |...
|...
TV Show 2
|------------- Series 1
               |-----------TV Show 2 - S0101 Episode Name.m4v
               |-----------TV Show 2 - S0102 Episode Name.m4v
               |...
|------------- Series 2
               |-----------TV Show 2 - S0201 Episode Name.m4v
               |...
|...

지금까지 찾은 해결책(예: TV 쇼 1, 시즌 1 폴더):

cd각 쇼의 각 시즌 폴더에 들어가서 실행하세요.

for f in *; do mv $f "TV Show 1 E01S$f"; done

하지만 이것은 정말 시간이 많이 걸리는 일입니다.

cd ../Season 2/
for f in *; do mv $f "TV Show 1 E02S$f"; done
cd ../Sesaon 3/

...

cd ../../TV Show 2/Season 1/
for f in *; do mv $f "TV Show 2 E01S$f"; done
...

제가 이상적으로 원하는 것은 상위 디렉토리에서 이름을 가져오고 상위 디렉토리에서 시즌 번호를 가져오는 스크립트를 작성하여 짧은 bash 스크립트를 작성하고 실행할 수 있도록 하는 것입니다. 그것은 다음과 같습니다:

#!/bin/bash
a=[TV Show folder]
b=[Season folder]
c=[each episode]

for c in each a/b/
mv $c "$a - S0$bE$c"    (or)   rename $c "$a - S0$bE$c"
done

for 루프나 특정 명령을 사용하여 구현하도록 도와주실 수 있나요?

답변1

최근에 비슷한 일을 한 적이 있어서 이미 그에 대한 대본이 있습니다.

for f in */*/*
do
  destdir=${f%/*}
  tvshow=${f%%/*}
  season=${destdir#*/}
  episode=${f##*/}
  # Get season number
  seasonnum=${season##* }

  dest=$(printf "%s/%s - S%02iE%s" "$destdir" "$tvshow" $seasonnum "$episode")
  echo "mv -- \"$f\" \"$dest\""
  # mv -- "$f" "$dest"
done

답변2

그리고 zsh:

autoload zmv # best in ~/.zshrc
zmv -n '(*)/(Series (<->))/(<->)(*)' '$1/$2/$1 - S${(l:2::0:)3}E${(l:2::0:)4}$5'

(행복하면 삭제 -n).

  • <-><x-y>숫자 의 x경우 to는 제공 되지 y않으므로 임의의 (십진수) 숫자입니다.xy
  • ${(l:2::0:)var}: 너비가 2인 왼쪽 패드에 0s가 있음

perl다음 과 동일 rename:

rename -n 's{./(.*)/Series (\d+)/\K\d+}{
             sprintf "%s - S%02dE%02d", $1, $2, $&}se' ./*/*/*

관련 정보