Ubuntuで1つのファイルをN個の他のファイルと比較するにはどうすればいいですか

Ubuntuで1つのファイルをN個の他のファイルと比較するにはどうすればいいですか

私はビデオのウェブサイトを持っています。ファイルがアップロードされるたびに、他のすべての既存のファイル (ビデオ) と比較して、重複していないことを確認する必要があります。

アップロードするたびに比較するファイルの数が増えることを考慮して、比較的高速なソリューションを探しています。

理想的には、これは PHP から実行されshell_exec、ファイルがすでに存在する場合は何らかの出力が返されるはずです (単純な 0 または 1 で十分です)。

については知っていますcmpが、diff存在するファイルの数が多いため、かなり遅くなるのではないかと心配しています。

他に検討すべき解決策はありますか?

答え1

各ビデオのファイルのチェックサムを計算し、値のリストを並べ替えることができます。同じチェックサムを持つものは同じファイルです。

プロセスを高速化するために、ほぼ同じサイズ(DELTAとして数KBで十分)のファイルをフィルタリングし、このファイルセットのみのハッシュを計算することができます。

答え2

すべてのビデオのチェックサム/ハッシュ ( sha1sum) を計算し、チェックサムのリストをファイルまたは DB に保存します。

新しいファイルを受信した場合:

  • チェックサム/ハッシュを計算する
  • このチェックサムをリスト/DBで検索する
  • 見つかった場合は拒否
  • 見つからない場合は受け入れ、チェックサムをリスト/DBに追加します

チェックサムを DB 内の追加列として保持する場合、チェックサム列の一意性制約を使用して、チェックサムを持つファイルがすでに存在するかどうかを判断し、DB への追加を自動的に失敗させることができます。

PS: とはいえ、MP4 のコメント フィールドを編集して別のビデオのように見せるのはかなり簡単です。

関連情報