Linux
確定2個目錄是否有任何區別的有效方法?
我想遞歸地比較兩個預期相同的目錄樹,但我不想要一個需要永遠進行的完整比較。我想做一個有效的比較,以便一旦檢測到 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
子程序。