テレビシリーズのシーズンと字幕をダウンロードしました。
.mp4ファイルと.srtファイルの名前が同じである場合、vlcはそれらをビデオに自動的に追加します。
彼らが持っている唯一の共通点はエピソードの数(E01、E02、...)です。
名前を自動的に変更するスクリプトを書きたいのですが、方法がわかりません...
例えば AE01 Video.mp4
およびSub E01.srt
には.mp4の名前が必要です
なにか提案を?
前もって感謝します!
すべてのビデオファイルがパターン*Exx*.mp4
に一致し、すべてのサブタイトルファイルが*Exx*.srt
に一致すると仮定します。ここで、xx
は同じ2桁の10進数です。次のシェルスクリプトを使用して、ファイルの名前を変更できます。 :
#!/bin/bash
shopt -s nullglob
printf '%s\n' *.mp4 |
sed -nre 's/^.*E([0-9]{2}).*$/\1 &/p' |
while read -r episode video; do
for subtitle in *"E${episode}"*.srt; do
dst="${video%.*}.${subtitle##*.}"
if [ "$dst" != "$subtitle" ]; then
mv -viT -- "$subtitle" "$dst"
fi
done
done
名前に同じエピソード番号の字幕ファイルが複数ある場合、または同じ名前のファイルがすでに存在する場合に備えて、インタラクティブウィッチ(-i
)をmv
コマンドに追加しました。また、idempotentです。つまり、スクリプトを複数回実行しても結果は変わらないため、いつでもスクリプトを中止し、何かを調査して、後で再実行できます。
一時ディレクトリに作成されたいくつかの空のファイルでテストできます。
mkdir /tmp/scratch
cd /tmp/scratch
touch 'AE01 Video.mp4' 'Sub E01.srt'