
私のiTunesライブラリはNAS(WD MyCloud 4TB)にあり、通常はiTunesライブラリごとにまとめられた多くのテレビシリーズがあります。
「テレビ番組」フォルダ:
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
|...
|...
これまでに見つかった解決策(例:テレビ番組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
ないため、任意の(10進数)数値です。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' ./*/*/*