2014-04-09 17 views
1

我想將find的輸出和能夠與diff進行比較,以查看文件是否相同。舉例來說,假設我發現找了幾個文件:有沒有辦法在bash shell中比較find和diff的輸出?

find . -name '*.bar' 

./desktop/filename.bar 
./otherdirectory/filename2.bar 
./otherotherdirectory/filename3.bar 

我希望能夠做到

diff ./desktop/filename.bar ./otherdirectory/filename2.bar 

diff ./desktop/filename.bar ./otherotherdirectory/filename3.bar 

等所有對找到的文件(至少看看這些文件是否相同),而無需爲每一對寫入命令行。

的發現-exec選項將不起作用,因爲它取代{}每一次結果在時刻:

find . -name '*.bar' -exec diff {} \; 

我也試圖通過管道找到差異的輸出,但我不能得到那個工作,無論是(雖然我還是個新手,也可以這樣做不對):

find . -name '*.bar' | diff 

這可能不是可行的,但我寧願沒有寫diff命令每對我用find找到的文件。

+2

你不太清楚你想達到什麼目的。 – devnull

+0

@ user2888465問題的標題並不真正反映真正要求的內容,這似乎是查找相同文件的一種方法。請考慮更改標題(或指定您正在嘗試執行的操作)。 – Adaephon

回答

0

不是試圖diff對所有可能的文件,以確定重複相反,你可以使用sha256sum,並比較校驗代替:

find . -name '*.bar' -type f -exec sha256sum {} \; 

相同的文件將具有相同的校驗。你可以管上面的命令的輸出sort,這樣的結果將通過校驗和排序:

find . -name '*.bar' -type f -exec sha256sum {} \; | sort 
+0

你應該使用'+'而不是'\;'以便'sha256sum'一次可以處理多個文件。另外,如果你將排序後的列表管道設置爲'uniq -w 64 --all-repeated = separate',你將得到一個只包含重複文件的分組列表。 – Adaephon

1

好了,該解決方案爲我工作如下

發現。 -name'* .bar'| xargs回聲| xargs diff

相關問題