![名前の代わりにチェックサムを使用してファイルを検索できますか? [コピー]](https://linux33.com/image/141823/%E5%90%8D%E5%89%8D%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%B5%E3%83%A0%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
test1.txt
以下を使用して、ファイルから生成されたsha256と一致するファイルがあるかどうかを見つけるために検索を実行するとします。
sha256sum -b test1.txt
私が得た結果は次のとおりです。
e3d748fdf10adca15c96d77a38aa0447fa87af9c297cb0b75e314cc313367daf * test1.txt
したがって、名前を使用する代わりに、生成されたチェックサムに一致するファイルを探したいと思います。
可能ですか?
答え1
find . -type f -exec sha256sum -b {} + |
grep -F 'e3d748fdf10adca15c96d77a38aa0447fa87af9c297cb0b75e314cc313367daf'
これにより、現在のディレクトリ内または下のすべてのファイルに対してSHA256チェックサムが計算されます。grep
探しているチェックサムに一致する計算結果が最後に抽出されます。
ジョブの結果がfind
ファイルに転送されると、作業できる「データベース」として機能できますgrep
。追加のロジックを追加すると、新しいファイルを使用してファイルの情報を更新するクローンジョブを作成できます。ファイルを定期的に更新し、古い情報を削除します。 (実際にはこの質問の内容ではありませんので、今はコードを残しておきます)。
関連コマンド構文find
:
答え2
通常、各ファイルのsha256合計を含むデータベースがないため、唯一の方法は各ファイルのsha256合計を計算することです(一致する項目が見つかった場合は停止)。これは非常に退屈で時間のかかる作業なので、実際の目的のために、ほとんどの場合、答えは「いいえ」です。
答え3
はい、可能です。しかし、システム内のすべてのファイルをチェックサムし、署名と比較する無差別代入を通じてのみ可能です。
(実際には、ファイル重複排除が機能するように、すべてのファイルをチェックサムし、同じ内容を持つファイルの強力な候補一致を探します。)
チェックサムでファイルを頻繁に検索する場合は、チェックサムをパスにマップするインデックスを作成することで、これらのチェックサムを頻繁に再計算する作業を減らすことができます。このインデックスを賢く実装すると、新しいファイルまたは最後の検索以降に更新されたファイルをチェックサムして増分更新を実行できます。