比较两个目录之间的差异并仅保留未改变的目录

比较两个目录之间的差异并仅保留未改变的目录

我需要比较两个目录:

 A: /path1/
 B: /path2/
  1. 目录 A 包含 B 中的所有文件和子目录。
  2. A(及其子目录)中的文件可以具有与 B 中的等效文件不同的内容。
  3. 目录 A(及其子目录)也包含 B 中不存在的额外文件。

我想要实现的目标是:

  • 仅保留 A 中与 B 中的文件不同的文件以及 B 中不存在的所有额外文件。
  • 删除 A 中所有不遵守先前规则的其他文件。

答案1

这种方法应该有效:

cd /path1

find . -type f -exec cmp -s {} /path2/{} \; -delete

怎么运行的:

  • find . -type f浏览当前目录中的所有文件(A) 及其子目录。

  • cmp -s {} /path2/{}静默地(-s)将当前处理的文件({})与匹配的文件进行比较/path2/{})。

  • 如果文件相同,cmp 返回 true 且-exec条件匹配。

  • 如果-exec条件匹配,则-delete删除该文件。

我建议在运行实际命令之前替换-delete为,以验证它是否按预期工作。-print


要处理剩余的空目录,可以执行以下命令:

find . -type d -exec rmdir -p {} \; 2> /dev/null
  • -type d仅查找目录。

  • -exec rmdir -p {} \;rmdir -p {}对找到的每个目录执行。

    {}是已找到的目录,并且-p开关使 rmdir 也删除其空的父目录。

  • 2> /dev/null抑制因尝试删除非空目录或以前删除的目录而产生的错误消息。

由于 rmdir 不能删除非空目录,所以这应该是最安全的方法。

相关内容