TVシリーズ一括の名前変更

TVシリーズ一括の名前変更

私の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

おすすめ記事