Bash 脚本用于搜索目录并将文件移动到新目录,删除任何副本



我有一个2TB的硬盘,里面装满了备份数据,包括数百部电影,其中大部分由于同一高清的顺序备份而被复制了好几次。硬盘驱动器被组织为备份文件夹列表,每个备份都包含一个电影文件夹,其中包含备份时笔记本电脑HD上的所有电影。

我想创建一个新的电影文件夹,并将每个"movies"子文件夹中的所有电影移动到新文件夹中,确保不会将同一部电影移动两次。如果我想通过 Bash 做所有事情,我该怎么做?

假设不同文件夹中电影的每个副本都具有相同的名称并且都具有相同的扩展名,假设.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

相关内容