質問: ハッシュ値でファイルを検索する方法はありますか? ファイルを検索するときに入力としてハッシュ値を持ち、出力としてファイルとその場所の完全なリストを持つことができる方法はありますか?これは、ファイルの重複を特定しようとするときに役立つ場合があります。すでにどこかに保存していることがわかっているが、どこにあるのかわからないファイルがたくさんある状況に陥ることがよくあります。それらは本質的に重複しています。たとえば、ポータブルハードドライブに大量のファイルを保存したり、デスクトップコンピュータの内蔵ハードドライブにそれらのファイルのハードコピーを保存したりできます...しかし、場所がわかりません。ファイルの名前が変更されていない場合は、ファイル名検索を実行して、デスクトップ上のハードコピーを見つけようとすることができます。次に、それらを並べて比較し、同じ場合は、ポータブルハードドライブにあるコピーを削除できます。ただし、ハードドライブのいずれかでファイルの名前が変更されている場合、これはおそらく機能しません(新しい名前が元の名前とどの程度異なるかによって異なります)。ファイルの名前が変更されたが編集されていない場合、そのハッシュ値を計算できます。 sha1の値は74e7432df4a66f246b5214d60b190b67e2f6ce52。次に、ファイルを検索するときにこの値を入力として使用し、オペレーティングシステムで、指定されたディレクトリまたはファイルシステム全体で、この正確なsha1ハッシュ値を持つファイルを検索し、これらのファイルが保存されている場所の完全なリストを出力します。私はwindowsを使用していますが、オペレーティングシステムに関係なく、このようなことをどのように実現できるかを知りたいと思っています。
回答: linuxの例:_echo '74e7432df4a66f246b5214d60b190b67e2f6ce52' | { read hash ; find -type f -exec sh -c 'sha1sum "$1" | cut -f 1 -d " " | sed "s|^\\\\||" | grep -eqi "$0"' "$hash" "{}" \; -print ; } _このコードは、次の理由により、思ったよりも複雑です。 スペース、改行、円記号、引用符、特殊文字などを含むファイル名を正しく処理することを目的としています(さらに解析するには、_-print_を_-print0_に変更してください)。 ハッシュを正規表現として受け入れることを目的としています(_grep -e_、つまりegrepと互換性があります)、 例えば。 '(^00)|(00$)'は、ファイルハッシュが_00_で開始または終了する場合に一致します。 互換性のあるインターフェースを備えた他の_*sum_ツールを使用できます(例:_md5sum_)。