这是一个关于 bash 的基本问题,但我找不到解决方案。
我有许多具有相同名称文件的子目录,我想比较所有这些文件的身份。
我可以返回此文件的列表
find . -name "protein.mol2"
Run Code Online (Sandbox Code Playgroud)
我知道该文件可以用作查询 diff
diff -q --from-file dir1/file dir2/file dir3/file; echo $?
Run Code Online (Sandbox Code Playgroud)
如何将find
to的输出通过管道传输diff
?
该--from-file
选项允许您将一个文件与多个文件进行比较(而不是像tar --files-from
从文件中读取要操作的文件列表之类的东西)。它有一个类似的--to-file
,您使用的两个中的哪一个取决于变化的相对“方向”。由于您正在使用-q
which 仅说明是否存在差异,因此这对您来说应该无关紧要。
我假设您有一个参考文件,并且您希望将其与一组同名文件进行比较,因此其中任何一个都应该有效:
diff -q --from-file dir1/protein.mol2 $(find . -name protein.mol2)
find . -name protein.mol2 | xargs diff -q --from-file dir1/protein.mol2
Run Code Online (Sandbox Code Playgroud)
在第一种情况下diff
将只运行一次,其退出代码将反映是否在集合中发现任何差异。
在第二种情况下diff
可能会运行多次。如果您有大量文件(或很长的文件/目录名)并达到命令参数限制(在 Linux 系统上通常为 128kB),则可以使用第二种形式。
归档时间: |
|
查看次数: |
4342 次 |
最近记录: |