2017-03-05 156 views
0

每個文件夾都有一個.mkv.avi文件。重命名帶有後綴名稱的文件夾

E.g:

Sommerferien201308/eins.avi 
Sommerferien201309/eins.mkv 
Herbst201401/film.avi 
Herbst201402/krz.mkv 

重命名爲:

Sommerferien201308/Sommerferien201308.avi 
Sommerferien201309/Sommerferien201309.mkv 
Herbst201401/Herbst201401.avi 
Herbst201402/Herbst201402.mkv 

如何重命名文件名以它的文件夾的名稱? 當然,每個文件夾名都是唯一的。對於每個文件/文件夾都要手動完成。

我會試着找到。

find . -type d -name "" -exec cd "" && mv {} \; 

但我不知道如何選擇文件夾的名稱,以及如何使.AVI或.MKV選擇和如何存儲選擇的文件夾名..

+0

一個文件夾被命名爲** Sommerferien2013 **和Videofile ** eins.mkv ** 我有很多這樣的文件,有時候會有.mkv或.avi或其他文件。 我會從'find'命令開始? 輸出將是** Sommerferien2013 \ Sommerferien2013.mkv ** – arphex

+1

想象一下,你是別人,你遇到了這個問題。你會說所有必要的信息可以給出一個很好的答案嗎? – Biffen

+0

好的,謝謝你解釋我試圖讓它更精確。如果問題不能理解,請給予反饋 – arphex

回答

1

您可以從底座使用此命令find您的文件夾包含*.avi*.mkv文件文件夾:

while IFS= read -rd '' f; do 
(
    IFS=/ 
    arr=($f) 
    if [[ $f != *"/${arr[len-2]}"* ]]; then 
     len=${#arr[@]} 
     ext="${arr[len-1]##*.}" 
     cd "$(dirname "$f")" && echo mv "${arr[len-1]}" "${arr[len-2]}.$ext" 
    fi 
) 
done < <(find . \(-name '*.mkv' -o -name '*.avi' \) -print0) 

當你滿意的輸出mv之前刪除echo

+0

謝謝。如何使用它?我在包含所有其他文件夾的文件夾中創建一個.sh文件?並將其粘貼到.sh文件中?我試了一下,然後執行'$ sh rename.sh'。 以下輸出來了 'rename.sh:第9行:語法錯誤附近的意外標記'<' rename.sh:第9行:'done < arphex

+1

太好了!當我執行它時,這會給我輸出。 find命令中的「-o」開關是什麼?如果我打算用.mp4擴展?我在我的操作系統的手冊中沒有找到「-o」。編輯:我找到了。一個OR表達式。 :) – arphex

+0

我刪除了'回聲',我得到了這個錯誤'mv:can stat'sommer.mkv':沒有這樣的文件或目錄'我能做什麼? – arphex