Linux

確定2個目錄是否有任何區別的有效方法?

  • March 4, 2021

我想遞歸地比較兩個預期相同的目錄樹,但我不想要一個需要永遠進行的完整比較。我想做一個有效的比較,以便一旦檢測到 1 個差異,命令就會停止並返回,並告訴我哪個文件不同。

我認為有什麼不同:

  • 兩個文件有不同的內容(不同的時間戳無關緊要)
  • 在一個目錄中找到了一個文件,但在另一個目錄中沒有找到(當然,在完全相同的路徑上)

筆記:

  • 我不需要知道文件中的實際差異,只需文件路徑就足夠了
  • 我在 Ubuntu 20.04 上嘗試了 diff 3.7,它沒有我可以看到的“停止差異”選項
  • 這些文件是文本和二進製文件的混合

我不知道執行此操作的程序,但是編寫一個小腳本呼叫diff並在第一個區別時停止很容易。像這樣:

#!/bin/bash

dir1="$1"
dir2="$2"

if [[ "*$dir1*$dir2*" == *"**"* ]]; then
   echo "Use: $0 dir1 dir2"
   exit 6
fi

while read line; do
   echo "The directory contents are different."
   exit 1
done < <(diff -qr "$dir1" "$dir2")
echo "The directory contents are the same."

這會將 的輸出通過管道傳輸diff到 aread中,在接收到任何內容後,它會退出 shell,殺死diff子程序。

引用自:https://serverfault.com/questions/1055966