movies
多くのサブフォルダを含むUbuntuというフォルダがあります。
各サブフォルダには1つのmp4ファイルが含まれており、他のファイル(jpg、srt)を含めることができます。
各サブフォルダのタイトル形式は次のとおりです。
My Subfolder 1 (2001) Bla Bla
My Subfolder 2 (2000) Bla
My Subfolder 3 (1999)
mp4ファイルの名前を親フォルダと同じに変更しますが、年とblablaを除外する方法は?
たとえば、上記のサブフォルダのmp4は次のようになります。
My Subfolder 1.mp4
My Subfolder 2.mp4
My Subfolder 3.mp4
mp4をサブフォルダに保存したいです。名前のみが変更されます。年は常に括弧内にあります。
ベストアンサー1
bashソリューションは次のとおりです。
cd movies
for mp4 in */*.mp4
do
if [[ $mp4 =~ ^(.*)\ \( ]]
then
echo mv -- "$mp4" ...to... "${mp4%%/*}/${BASH_REMATCH[1]}".mp4
fi
done
これは、「movies」のすべてのサブディレクトリにあるすべてのmp4ファイルを繰り返し、パターンマッチングテストを適用します。一致する場合:
^
- 最初から(.*)
- 好きなだけ文字をキャプチャして保存します。\ \(
- 後ろに空白と開く括弧が続きます。
一致が成功した場合は、ディレクトリ内の予想されるパターンのmp4ファイルを見つけました。 Bashは括弧で囲まれた一致を$BASH_REMATCH
配列変数に格納するため、mv
元のファイル名と組み合わせた新しい名前を使用して呼び出します。
${mp4%%/*}
元のディレクトリ名/
/ - ディレクトリ区切り記号${BASH_REMATCH[1]}".mp4
- 上記で保存した部分、サフィックスを含む.mp4
結果が正しい場合echo
と...to...
部分を削除します。