Как сравнить 1 файл с N другими файлами в Ubuntu

Как сравнить 1 файл с N другими файлами в Ubuntu

У меня есть видеосайт. Всякий раз, когда загружается файл, его нужно сравнить со всеми другими существующими файлами (видео), чтобы убедиться, что это не дубликат.

Учитывая, что с каждой загрузкой количество сравниваемых файлов увеличивается, я ищу решение, которое будет относительно быстрым.

В идеале это будет выполняться с использованием shell_execphp, поэтому он должен вернуть какой-то вывод, если файл уже существует (подойдет простой 0 или 1).

Я знаю об этом cmp, diffно боюсь, что с учетом количества существующих файлов это будет довольно медленно.

Есть ли какие-то другие решения, которые мне следует рассмотреть?

решение1

Вы можете вычислить контрольную сумму файла для каждого видео, а затем отсортировать список значений. Те, у которых одинаковая контрольная сумма, являются одним и тем же файлом.

Чтобы ускорить процесс, вы можете отфильтровать файлы по размеру (может быть достаточно нескольких килобайт, так как DELTA), а затем вычислить хэш только для этого набора файлов.

решение2

Вычислите контрольную сумму/хэш ( sha1sum) всех ваших видео и сохраните список контрольных сумм в файле или базе данных.

Когда вы получаете новый файл:

  • вычислить его контрольную сумму/хэш
  • поиск этой контрольной суммы в списке/БД
  • если найдено, отклонить
  • если не найдено, принять и добавить контрольную сумму в список/БД

Если вы сохраняете контрольную сумму как дополнительный столбец в базе данных, ограничение уникальности столбца контрольной суммы можно использовать для определения того, существует ли уже файл с контрольной суммой, и автоматически отменяет его добавление в базу данных.

PS: при этом довольно легко отредактировать поле комментариев в MP4, чтобы оно выглядело как другое видео.

Связанный контент