Я хочу иметь возможность сжимать файл без потерь, и если исходный файл идентичен файлу другого пользователя, я хочу, чтобы оба наших сжатых файла совпали, даже если даты исходного файла отличаются .
Я хочу использовать максимум 1 ГБ оперативной памяти при сжатии. Я склоняюсь к асимметричному алгоритму, потому что файлы, которые у меня есть, довольно большие, и их сжатие с помощью LZMA1 "ultra" в 7-zip занимает не менее часа на машине P4 с 1 ГБ ОЗУ и больше ничего не работает. Я думаю, что 7-zip и FreeARC могут быть использованы для моих целей. Я пытался найти команды, которые я должен использовать, но мне не повезло.
редактировать : должны быть созданы 100% идентичные файлы, даже если даты создания разные. Это должно быть возможно через --nodates во Freearc и с ???? в 7-почтовый индекс. Я ищу эквивалентную команду для 7-zip и способ стандартизации сжатия на нескольких компьютерах.
Ответы:
Создайте пару идентичных файлов:
GZIP их ...
обратите внимание на поле отметки времени как единственную разницу:
Для получения дополнительной информации о отметке времени см. RFC.
Теперь вы можете взять MD5, который начинается после 8 байта, обнулить эти четыре байта в файлах и потерять их временные метки, или извлечь CRC16 из этих gzips (также см. RFC для получения информации о том, как извлечь это).
Или вы можете сохранить без отметки времени:
источник
gzip
для Windows нет других портов , Cygwin предоставляет их.Не прямой ответ на ваш вопрос, но в любом случае это может помочь.
Давным-давно (другое тысячелетие) у меня была такая же проблема. Мы хотели узнать, были ли сжатые файлы одинаковыми, не распаковывая их и не сравнивая их.
Нашим решением было получить md5- сумму файла перед его сжатием, затем мы сжали файл и переименовали его в
md5sum.zip
(.zip или .tar.gz или .rar или .whothing) . Таким образом, мы знали, что если два файла имеют одинаковое имя (без суффикса), они идентичны.источник
У pristine-tar есть взломанная версия gzip, которая всегда дает одинаковые результаты (и другую для bzip2). Выберите вариант алгоритма и отметку времени, и все готово.
источник
Взломать источники 7-zip. Там, где он читает дату файла, просто вставьте код для изменения даты на 01.01.1997 или что-то другое - исправлено для всех файлов. Скомпилируйте с другим именем и используйте его.
источник