SHA256SUMSを確認し、予期しないファイルでゼロ以外の値で終了します(ファイルがダイジェストに存在しません)。

SHA256SUMSを確認し、予期しないファイルでゼロ以外の値で終了します(ファイルがダイジェストに存在しません)。

を使用してダウンロードしたファイルセットの整合性を確認しますsha256sum

PGPを使用して、ダイジェストファイル(名前付き)にSHA256SUMS暗号化方式で署名しました。現在のディレクトリにあるすべてのファイルのチェックサムを再帰的に計算してファイルを作成します。

find . -type f -not -name SHA256SUMS -exec sha256sum '{}' \; >> SHA256SUMS

次のコマンドを実行して(ダイジェストファイルの署名を確認した後、この質問では省略)、ファイルの整合性を確認できます。

sha256sum -c SHA256SUMS

ダイジェストファイル内のファイルの内容がダイジェストファイルに保存されているものと異なる場合、上記のコマンドはゼロ以外の値で終了します。

しかしそれはいいえ要約にリストされていない新しいファイルがある場合は、ゼロ以外の値で終了します。

sha256sum予期しないファイルがある場合、失敗する可能性のあるオプションが見つかりません。

sha256sum未確認ファイルの失敗など、再帰を使用してディレクトリの整合性を確認する方法は?

答え1

ソートされたファイルのリストを作成できます。

find . -type f | sort

そして、チェックサムを含むソートされたファイルのリストは次のとおりです。

find . -type f -print0 | sort -z | xargs -0 sha256sum

次にcmpdiff -uまたは同様のものを使用して結果のリストを比較します。ファイルを追加または削除しない場合は、毎回結果が同じでなければなりません。


ファイルリストを別々に保存する代わりに、SHA256SUMSからファイル名のみを抽出できますcut --bytes=67-

チェックサムなしでファイルのリストのみを比較すると、そのファイルのチェックサムを計算することなく、ファイルが追加または削除されたことをすばやく確認できます。

要約すると、SHA256SUMS ファイルがすでに存在すると仮定します。

diff -u \
    <(cut --bytes=67- < SHA256SUMS) \
    <(find . -type f -not -name SHA256SUMS -print | sort)

出力が表示されない場合、ファイルのリストは同じです(サブディレクトリ内の他のSHA256SUMSファイルを除く)。 findはこれらのファイルも除外するからです。


もう一つの極端なケースは、sha256sum読み取り権限のないファイルに会う場合です。標準出力としてまったく印刷されないため、リストの生成中にエラーが発生していないことを確認するか、標準エラー出力もキャプチャする必要があります。

関連情報