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

Gue*_*est 3 shell files

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

例子:

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

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

Joh*_*024 6

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

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

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

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