繁体   English   中英

如何获取 dir1 中不存在于 dir2 的所有项目的列表?

[英]How do I get the list of all items in dir1 which don't exist in dir2?

我想计算两个目录之间的差异 - 但不是在diff的意义上,即不是文件和子目录的内容,而只是在项目列表方面。 因此,如果目录具有以下文件:

目录1 目录2
f1 f2 f4 f2 f3

我想得到f1f4

您可以使用comm比较两个列表:

comm -23 <(ls dir1) <(ls dir2)
  • 使用<(cmd)进程替换传递 cmd 的cmd ,就好像它是文件名一样。 它类似于$(cmd)但不是将 output 捕获为字符串,而是生成一个动态文件名(通常是/dev/fd/### )。
  • comm打印三列信息:文件 1 独有的行、文件 2 独有的行以及两者中都出现的行。 -23隐藏第二列和第三列,只显示文件 1 特有的行。

您可以扩展它以使用find进行递归差异。 如果你这样做,你需要抑制 output 中的前导目录,这可以通过几个战略性cd来完成。

comm -23 <(cd dir1; find) <(cd dir2; find)

编辑:由于@JohnKugelamn: 一个天真的基于差异的解决方案+改进:

diff --suppress-common-lines <(\ls dir1) <(\ls dir2) | egrep "^<" | cut -c3-

我们不再处理目录,而是转而处理文件; 然后我们使用常规差异,只取第一个文件中出现的行, diff标记为< - 然后最后删除该标记。


自然可以通过检查错误来美化上面的内容,验证我们已经得到了两个 arguments,打印使用信息等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM