내 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
않으므로 임의의 (십진수) 숫자입니다.x
y
${(l:2::0:)var}
: 너비가 2인 왼쪽 패드에0
s가 있음
perl
다음 과 동일 rename
:
rename -n 's{./(.*)/Series (\d+)/\K\d+}{
sprintf "%s - S%02dE%02d", $1, $2, $&}se' ./*/*/*