Shell-Script
如何在不打開它們的情況下比較不同的文件?
我有兩個目錄 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/file
和A/subdir2/otherfile
相同,它們仍將被列印。如果有多個重複,它們都將被列印出來。您可以通過管道將 md5sum 從輸出中刪除,例如,
awk '{print $2}'
或 withcut
orsed
等。我將它們留在輸出中,因為它們是關聯數組(又名“散列”)的有用鍵awk
或perl
等進一步加工。