[英]Compare filenames (without extension) from “Dir1” to subfolder “Dir2” assuming I'm at “Dir1”
[英]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 |
我想得到f1
和f4
。
您可以使用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.