LINUX.ORG.RU

diff zip-архивов

 , ,


1

1
  1. Существует ли готовая программа, способная сравнивать архивы, как diff сравнивает директории? То есть выводить список различий текстовых файлов в тех же форматах, понятных patch. Всё, что я нашёл — предельно примитивные zipcmp и folderdiff, которые только выводят имена различающихся файлов. И советы, как сделать подобный скрипт. Выглядит несложно.

  2. Форматы документов ODT и DOCX — набор файлов XML в архиве ZIP. Подобный diff мог бы помочь сравнивать офисные документы. Почему его до сих пор не сделали? Содержимое XML при многократных сохранениях слишком сильно преобразуется? Много случайного мусора? Элементы тасуются в произвольном порядке?

  3. А что если обобщить? Пусть архив будет форматом-контейнером (OLE, RIFF, PNG, что ещё можете предложить…), а сравниваемое содержимое — любыми данными, для которых текстовый diff или побайтное сравнение несёт какую-то человекочитаемую информацию, и патч можно легко наложить/откатить. Так кто-нибудь делал?

Никакую практическую задачу не решаю. Просто в очередной раз столкнулся со сравнением бинарных документов, стало любопытно.

ОТВЕТ: Судя по скриншотам, это умеет diffoscope: https://diffoscope.org https://try.diffoscope.org
Хотя в комментариях пишут, что его подход может не быть оптимальным для сравнения XML. Попробую как-нибудь.

★★★★★

Последнее исправление: question4 (всего исправлений: 1)

Подобный diff мог бы помочь сравнивать офисные документы

Кто в здравом уме будет разглядывать diff xml-я, если в офисе есть функция сравнения документов?

Может потому и нет такого diff-а, что он в общем-то никому не нужен?

cobold ★★★★★
()
Ответ на: комментарий от cobold

Кто в здравом уме будет разглядывать diff xml-я, если в офисе есть функция сравнения документов?

Тот, кто их хранит в GIT-е :)

P.S. И патчить их из командной строки, не загружая Офис, тоже заманчиво :)

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от pfg

вариант2: делаешь листинг zip-архива c CRC32 подписями несжатых файлов. считаешь CRC32 для сравниваемых файлов и быстро выясняешь что изменилось.

В комплекте с библиотекой libzip идёт zipcmp, которая сравнивает файлы именно на таком уровне — совпали/не совпали.

question4 ★★★★★
() автор топика

Можно попробовать распаковать и сравнить каким-нибудь xmldiff. Обычный diff всё-таки для простых текстовых файлов с редко меняющимися короткими строками. В офисах есть много операций с документом, которые серьёзно изменяют его контент.

neumond
()

Форматы документов ODT и DOCX — набор файлов XML в архиве ZIP. Подобный diff мог бы помочь сравнивать офисные документы. Почему его до сих пор не сделали? Содержимое XML при многократных сохранениях слишком сильно преобразуется? Много случайного мусора? Элементы тасуются в произвольном порядке?

1. Как уже сказали в самом офисном ПО уже есть функционал сравнения.
2. Содержимое XML (ODT) - очень сильно перетасовывается при сохранении (идентификаторы тегов, стилей, т.е. то что пользователь не видит)

Atlant ★★★★★
()
Ответ на: комментарий от question4

Пока нет (https://github.com/WinMerge/winmerge/issues/141), но в Wine оно работает. Сам WinMerge – это свободное ПО с лицензией GPL.

К сожалению я не смог найти альтернатив WinMerge с таким же богатым функционалом. Всякие Meld, KDiff3 не умеют многого из того, что умеет WinMerge, либо делают это хуже.

X512 ★★★★★
()