比較目錄結構的最佳方法是什麼?
我有一個備份實用程序,它使用同步。我想告訴來源和備份之間的確切差異(在檔案大小和上次更改日期方面)。
就像是:
Local file Remote file Compare
/home/udi/1.txt (date)(size) /home/udi/1.txt (date)(size) EQUAL
/home/udi/2.txt (date)(size) /home/udi/2.txt (date)(size) DIFFERENT
當然,該工具可以是現成的,也可以是 python 腳本的想法。
非常感謝!
烏迪
答案1
您正在尋找的工具是差值。它的工作原理類似於 rsync 和 diff 的結合。它會建立一個補丁文件,您可以比較或分發該文件。
答案2
有些人出於不同的原因想要比較文件系統,所以我將在這裡寫下我想要的內容以及我是如何做到的。
我想了:
- 為了比較相同的檔案系統與自身,即快照,做出改變,快照,比較。
- 新增或刪除的檔案的列表,不關心內部文件的變更。
我做了什麼:
第一個快照(before.sh
腳本):
find / -xdev | sort > fs-before.txt
第二個快照(after.sh
腳本):
find / -xdev | sort > fs-after.txt
比較它們(diff.sh
腳本):
diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'
好的部分是它使用了幾乎預設的系統二進位。可以透過傳遞find
一個-exec
回顯檔案路徑的參數和之後的 MD5 來進行基於內容的比較。
答案3
如果您不想安裝其他工具...
for host in host1 host2
do
ssh $host '
cd /dir &&
find . |
while
read line
do
ls -l "$line"
done ' | sort > /tmp/temp.$host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"
是的,可以使用 find 和 exec 或 find 和 xargs 來完成,就像在 for 迴圈中 find 一樣容易。而且,您還可以美化 diff 的輸出,這樣它會顯示諸如“此檔案位於 host1 但不在 host2 上”之類的內容,但此時您也可以只安裝其他人正在談論的工具...
答案4
diff -r
實際上效果很好。如果您只想知道文件是否不同,而不是差異的實際內容,那麼請執行以下操作diff -qr