2014-03-06 113 views
0

我有一個2TB硬盤驅動器,其中包含數百部電影,其中大部分電影由於順序備份而被複制多次的同一個房間。硬盤被組織爲一個備份文件夾列表,每個備份包含一個電影文件夾,其中包含備份時筆記本電腦上所有電影。用於搜索目錄和將文件移動到新目錄的Bash腳本,刪除任何副本

我想創建一個新的電影文件夾,並將每個「電影」子文件夾中的所有電影移動到新電影文件夾中,確保不要移動同一電影兩次。如果我想通過Bash做所有事情,我該如何解決這個問題?

回答

1

假設在不同文件夾中的電影的每個副本具有相同的名稱,並都具有相同的延伸,讓我們說.divx,您可以使用find找到它們,並將它們複製到不同的文件夾,然後刪除舊文件夾。

find/-iname "*.divx" -type f -print0 | xargs -0 -I '{}' mv "{}" /path/to/new_folder/ 

或者你也可以遍歷所有的文件和複製,如果他們不存在他們只new_folder。如果已經存在,請刪除其他副本。像這樣的:

for file in $(find . -iname "*.divx" -type f) 
do 
filename=$(basename ${file}) 
if [ ! -f ./movie/${filename} ]; then 
    mv ${file} ./movie/${filename} 
else 
    rm ${file} 
fi 
done 
+0

我建議'mv -n「$ file」./movie/ && rm -f「$ file」'作爲你的循環體的一個較短的等價物。並且請注意,這段代碼在文件名中是WRT空格或類似的東西。 – user2719058

+0

@ user2719058我同意。第一個應該使用空格處理文件名。其次,我剛剛舉了一個例子。 – Amit

+0

特定電影的所有副本都是相同的,但各種電影具有不同的擴展名,如mp4,mkv等。 – user3225710

相關問題