Rename

如何重命名與父文件夾同名的文件

  • August 16, 2019

我的 Ubuntu 上有一個文件夾movies,其中包含許多子文件夾。

每個子文件夾包含 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 留在他們的子文件夾中,只是他們的名字會被改變。年份總是在括號中。

這是一個 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...部分。

引用自:https://unix.stackexchange.com/questions/535777