Нет более эффективных методов.
Вы можете проверить, что размеры файлов одинаковы, но есть реальный шанс ложного срабатывания. Проверка расширения файла бесполезна, потому что вы можете иметь два одинаковых файла с разными расширениями.
Вы можете проверить, что содержимое файла точно совпадает, например, с помощью команды cmp
, которая является частью любой установки Unix. Это намного медленнее, чем проверка размера файла, потому что размер - это просто чтение метаданных, а сравнение байтов за байтом требует считывания обоих файлов.
Вы можете вычислить контрольную сумму, которая, по сути, такая же, как указано выше, но (1) потребляет больше ЦП в простом двухфайловом случае и (2) значительно упрощает сравнение более двух файлов. Причина этого в том, что вы можете кэшировать контрольную сумму, чтобы вам не приходилось перечитывать каждый файл для каждого другого файла, вы просто сравниваете контрольные суммы.
Если у вас есть известный тип файла, такой как тип изображения, вы можете выполнить "лучшие" тесты для приблизительного равенства, если приблизительное равенство было вашей целью. Любой такой метод не потребляет меньше ресурсов процессора или меньше операций чтения с диска, чем любой из вышеперечисленных методов.
Если ваша файловая система ZFS или другая ФС, которая проверяет суммы файлов или блокирует "нативно", вы можете эффективно сравнивать файлы, просто читая метаданные файловой системы.
Лучше всего при внедрении универсального поиска дубликатов использовать заранее подготовленное решение. Если вам нужно сделать это самостоятельно, вы должны отсканировать и проверить контрольные суммы всех файлов, вести базу данных результатов, а затем обновлять ее при изменении файлов (или периодически, если это лучше для вашего сценария). Проверка дубликатов становится простым и эффективным способом запроса базы данных.