Shell-Script
通過選擇隨機文件並在每個分區的兩個文件上執行 sha1 雜湊來檢查兩個分區
先前對文章的回答提到在 dd 驅動器複製映像的映像上執行 sha1 雜湊。
該文章的另一個答案建議安裝 dd 圖像,然後比較“重要文件”的 sha1 雜湊是否匹配。
我想使用第二種方法,但不是手動選擇文件,而是我想使用一堆隨機選擇的文件。
假設我有兩個已掛載的分區,我可以選擇一堆隨機文件並比較 sha1 散列,如果散列不相等則停止並出現錯誤?
如果一切順利,輸出應該與此大致相似:
好的:所有 10000 個隨機選擇的文件都有匹配的 sha1 和分區 sda 和 sdb
或者輸出應該只在出現錯誤的情況下顯示在兩個分區上具有不同 sha1 總和的文件名。
目前程式碼正在進行中:
#!/bin/bash N=5 mydir="/home" dirlisting=`find $mydir |sort -R |tail -$N` for fname in $dirlisting do echo $fname done
據我了解您的問題,您想知道兩個文件系統路徑之間的 N 個隨機文件是否不同。比較文件應該比計算兩個文件的校驗和更快。您可以這樣做:
#!/bin/sh list1=/tmp/list1 list2=/tmp/list2 shuflist=/tmp/shuflist n=100000 # How many files to compare. if test ! -d "$1" -o ! -d "$2"; then echo "Usage: $0 path1 path2" exit 1 fi exitcode=0 (cd "$1" && find . -type f >"$list1") || exit 1 (cd "$2" && find . -type f >"$list2") || exit 1 if cmp -s "$list1" "$list2"; then shuf -n "$n" "$list1" > "$shuflist" while IFS= read -r filename; do if ! cmp -s "$1/$filename" "$2/$filename"; then echo "Files '$1/$filename' and '$2/$filename' differ." exitcode=1 break fi done < "$shuflist" else echo File lists differ. exitcode=1 fi rm "$list1" "$list2" "$shuflist" exit $exitcode
請注意,此腳本假定您的所有文件名都不包含換行符。