Rename
如何重命名與父文件夾同名的文件
我的 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...
部分。