親フォルダと同じ名前でファイル名を変更する方法

親フォルダと同じ名前でファイル名を変更する方法

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...部分を削除します。

おすすめ記事