2014-03-06 112 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

相关问题