ランダムファイルを選択し、各パーティションの両方のファイルでsha1ハッシュを実行して、両方のパーティションを確認します。

ランダムファイルを選択し、各パーティションの両方のファイルでsha1ハッシュを実行して、両方のパーティションを確認します。

以前の回答ある記事では、ddドライブのクローンイメージのイメージからsha1ハッシュを実行することについて述べました。

その他その投稿に返信してくださいddイメージをインストールしてから、「重要ファイル」のsha1ハッシュを比較して一致することを確認することをお勧めします。

2番目の方法を使用したいのですが、手動でファイルを選択するのではなく、ランダムに選択された複数のファイルを使用したいと思います。

2つのマウントされたパーティションがあると仮定すると、ランダムファイルの束を選択して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

答え1

あなたの質問を理解したら、N個のランダムファイルが2つのファイルシステムパス間で異なることを確認したいと思います。ファイルの比較は、両方のファイルのチェックサムを計算するよりも高速です。次のことができます。

#!/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

このスクリプトでは、ファイル名に改行文字が含まれていないと仮定します。

答え2

両方のディレクトリのファイルとサブディレクトリを比較するには、次の手順を実行します。違いコマンドを使用すると、これを行うことができます。実行してdiff -rq /path/to/fileset1 /path/to/fileset2、どのファイルが異なり、どのファイルがどのツリーから欠落しているかを知らせます。監査の目的で、すべての変更の詳細なリストを提供するようにコマンドを拡張することもできます。diff -rNau /パス/to/fileset1 /path/to/fileset2たとえば、変更を保存したい場所に出力をリダイレクトします。

関連情報