比較(比較)完整目錄結構的最佳方法?

比較(比較)完整目錄結構的最佳方法?

比較目錄結構的最佳方法是什麼?

我有一個備份實用程序,它使用同步。我想告訴來源和備份之間的確切差異(在檔案大小和上次更改日期方面)。

就像是:

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

相關內容