Bash

如何將 find 的輸出作為 diff 的輸入進行管道傳輸?

  • October 16, 2015

這是一個關於 bash 的基本問題,但我找不到解決方案。

我有許多具有相同名稱文件的子目錄,我想比較它們的身份。

我可以返回這個文件的列表

find . -name "protein.mol2"

我知道該文件可以用作查詢diff

diff -q --from-file dir1/file dir2/file dir3/file; echo $?

如何通過管道輸出findto diff

--from-file選項允許您將一個文件與多個文件進行比較(而不是像tar --files-from從文件中讀取要操作的文件列表之類的東西)。它有一個類似--to-file的 ,您使用的兩個中的哪一個將取決於更改的相對“方向”。由於您使用-qwhich 僅說明是否存在差異,因此希望在這裡對您無關緊要。

我假設您有一個參考文件,並且您希望將其與一組同名文件進行比較,因此其中任何一個都應該起作用:

diff -q --from-file dir1/protein.mol2 $(find . -name protein.mol2)
find . -name protein.mol2 | xargs diff -q --from-file dir1/protein.mol2

在第一種情況下diff只執行一次,它的退出程式碼將反映是否在集合中發現了任何差異。

在第二種情況下diff可能執行不止一次。如果您有大量文件(或非常長的文件/目錄名稱)並達到命令參數限制(在 Linux 系統上通常為 128kB),則可以使用第二種形式。

引用自:https://unix.stackexchange.com/questions/236581