1. ホーム
  2. linux

[解決済み] Linux: 与えられたフォルダとコンテンツに対して単一のハッシュを計算する?

2022-08-19 08:13:31

質問

きっと簡単にできる方法があるはずです!

のような Linux のコマンドラインアプリを試してみました。 sha1summd5sum を追加しましたが、これらは個々のファイルのハッシュを計算し、各ファイルについて1つずつハッシュ値のリストを出力することしかできないようです。

私は、フォルダーのコンテンツ全体 (ファイル名だけでなく) に対して単一のハッシュを生成する必要があります。

私は次のようなことをしたいと思います。

sha1sum /folder/of/stuff > singlehashvalue

編集します。 を明確にするために、私のファイルはディレクトリツリー内の複数のレベルにあり、それらはすべて同じルートフォルダに座っているわけではありません。

どのように解決するのですか?

考えられる方法の1つです。

sha1sum path/to/folder/* | sha1sum

ディレクトリツリー全体がある場合、おそらくfindとxargsを使う方が良いでしょう。一つの可能なコマンドは

find path/to/folder -type f -print0 | sort -z | xargs -0 sha1sum | sha1sum

そして最後に、パーミッションや空のディレクトリも考慮する必要がある場合。

(find path/to/folder -type f -print0  | sort -z | xargs -0 sha1sum;
 find path/to/folder \( -type f -o -type d \) -print0 | sort -z | \
   xargs -0 stat -c '%n %a') \
| sha1sum

の引数は stat への引数は、ファイル名とその8進数のパーミッションを表示させます。2 つの検索が次々に実行され、ディスク IO 量が 2 倍になります。1 つ目はすべてのファイル名を検索して内容をチェックサムし、2 つ目はすべてのファイルとディレクトリ名を検索して名前とモードを表示します。ファイル名とチェックサム"のリストと、パーミッションを含む名前とディレクトリ"のリストが続いてチェックサムされ、より小さなチェックサムが作成されます。