删除2个目录中的重复文件

删除2个目录中的重复文件

我有两个文件夹(带子文件夹),其中包含的文件基本上包含相同的内容。

例子:

  • /folder/files/data/new
  • /folder/files/data/old

有没有办法删除 /new 中已经存在于 /old 中的所有文件严格的文件名(未修改日期)以防止我重新读取重复的文件。

答案1

下面的代码不仅会搜索old目录,还会搜索其子目录,并从new目录中删除具有相同名称和路径的文件。这适用于所有恶意文件名(空格、换行符等):

cd /folder/files/data/old || { echo "Failed to get in correct directory" ; exit 1 ; }
find . -type f -exec rm -f ../new/{} \;

该参数-type f告诉find我们要查找文件,而不是目录。该-exec ... \;参数告诉find我们,一旦在 中找到文件,就应该在子目录中的对应文件上old运行该命令。rm -fnew

因为rm给出了该-f选项,所以它会默默地忽略不存在的文件。这样就无需在new尝试删除文件之前测试该文件是否存在。另外,删除文件前也不会提示。这在删除大量文件时非常方便。然而,在运行此脚本之前确保您确实要删除这些文件。为了保护,如果cd命令失败,脚本将退出并显示错误。

相关内容