我的目录中有很多文件,我想检查一下它们是否唯一。为简单起见,假设我有三个文件:foo.txt
,bar.txt
和baz.txt
。如果运行此循环,则将彼此进行检查:
$ for f in ./*; do for i in ./*; do diff -q "$f" "$i"; done; done
Files bar.txt and baz.txt differ
Files bar.txt and foo.txt differ
Files baz.txt and bar.txt differ
Files baz.txt and foo.txt differ
Files foo.txt and bar.txt differ
Files foo.txt and baz.txt differ
对于我要处理的数百个文件,这将变得非常难以阅读;最好列出确实匹配的文件,然后我可以快速查看列表并确保文件仅匹配自己。从联机帮助页来看,我认为该-s
选项可以完成此任务:
$ for f in ./*; do for i in ./*; do diff -s "$f" "$i"; done; done
Files bar.txt and bar.txt are identical
Files baz.txt and baz.txt are identical
Files foo.txt and foo.txt are identical
...但是,实际上,它还会打印出所有不同文件的全部内容。有什么办法可以抑制这种行为,所以我只能得到上面的行为?
或者,是否有其他工具可以完成此任务?
如果只想检查两个文件是否相同,请使用cmp
。要仅获取相同文件的输出,可以使用
for f in ./*; do for i in ./*; do cmp -s "$f" "$i" && echo "Files $f and $i are identical"; done; done
diff
尝试生成简短的,易于理解的差异列表,这可能会花费大量时间,因此如果不需要,可以避免开销。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句