Это зависит от того, что вы подразумеваете под «простым».
С одной стороны, вы можете использовать временные метки файла. Но проблема в том, что временные метки могут вводить в заблуждение:
Проверки в зависимости от отметок времени могут повлиять на проблемы с перекосом часов. (Это зависит от того, какие часы задействованы, и от того, как часы управляются.)
Возможно, что временные метки файла будут сброшены (например, пользователем «root»), создавая впечатление, чтофайл не изменился.
Изменить «измененную» метку времени файла тривиально без фактического изменения файла;например, touch
.
С другой стороны, если вы используете контрольные суммы, у вас есть другие проблемы:
Вычисление контрольной суммы файла влечет за собой чтениевесь файл. (Частичной контрольной суммы недостаточно, чтобы обнаружить изменения, в общем.) Некоторые алгоритмы контрольной суммы также относительно дороги.
Вам также необходимо знать, что такое предыдущий контрольная сумма для файла была. Это означает, что вам нужен способ / место для его хранения. Это может быть просто другой файл, но тогда вам понадобится некоторая инфраструктура для обновления этого файла (надежно) как часть процедуры синхронизации.
XOR при использовании нескольких контрольных сумм возникает проблема, из-за которой вы не можетеНе знаю, какие файлы были изменены. Если один файл изменяется, вам нужно синхронизировать их все.
Теоретически возможно изменение файла и контрольная сумма MD5 будет одинаковой: вероятность 1 в 2 ^ 128. Вы, вероятно, можете обесценить это ... если только ваше приложение не критично для безопасности(Обратите внимание, что атаки коллизии MD5 практичны в некоторых контекстах ; см. https://en.wikipedia.org/wiki/Collision_attack)
Другое дело, что я подозреваю, что вы пытаетесь решить решенную проблемуНапример, утилита Linux / Unix rsync
имеет возможность использовать временные метки или (MD5) контрольные суммы, чтобы решить, какие файлы необходимо синхронизировать.
Вам не нужно реализовывать все самостоятельно (в Java).
В ответ на ваше «у нас нет доступа к старому дереву файлов» существует простое решение для этого. Каждый раз, когда вы перезагружаетесь:
- скопировать дерево файлов
- сравнить текущие файлы с копией, которую вы сделали в последний раз , которую вы перезагрузили.
Как я уже говорил в комментарияхваше воображение.