Shell-Script

如何在不打開它們的情況下比較不同的文件?

  • May 20, 2016

我有兩個目錄 A 和 B;每一個都包含很多子目錄

geom001, geom002 ....etc

每個子目錄都包含一個名為 results.txt 的文件。我想在不打開任何文件的情況下將 A 中的每個文件與 B 中的每個文件進行比較,並查找 A 中是否有一個或多個文件類似於 B 中的一個或多個文件。如何在 a 中使用如下命令循環搜尋所有文件?

cmp --silent  file1 file2  || echo "file1 and file2 are different"

如果文件完全相同,那麼它們md5sum的 s 將完全相同,因此您可以使用:

find A/ B/ -type f -exec md5sum {} + | sort | uniq -w32 -D

一個 md5sum 總是正好 128 位(或 16 個字節或 32 個十六進制數字)長,並且md5sum程序輸出使用十六進制數字。所以我們使用命令-w32上的選項uniq來比較每行的前 32 個字元。

這將列印所有具有非唯一 md5sum 的文件。即重複。

注意:這將檢測重複文件,無論它們在 A/ 或 B/ 中的什麼位置 - 因此如果/A/subdir1/fileA/subdir2/otherfile相同,它們仍將被列印。如果有多個重複,它們都將被列印出來。

您可以通過管道將 md5sum 從輸出中刪除,例如,awk '{print $2}'或 with cutorsed等​​。我將它們留在輸出中,因為它們是關聯數組(又名“散列”)的有用鍵awkperl等進一步加工。

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