Как вы сравниваете содержимое двух архивных файлов программно? - PullRequest
4 голосов
/ 12 февраля 2009

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

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

Кстати, я использую стек Perl LAMP. спасибо.

Ответы [ 4 ]

3 голосов
/ 12 февраля 2009

Вы можете использовать perl Archive :: ZIP или Python zipfile , чтобы извлечь имена файлов, размеры и контрольные суммы CRC файлов в архивах. Создайте файл, содержащий результаты, отсортированные по имени файла (игнорируйте путь).

Для ваших небольших ZIP-архивов объедините результаты скрипта (cat list1 list2 list3 | sort).

Теперь вы можете использовать diff для сравнения результатов.

1 голос
/ 12 февраля 2009

Подсказка из ответа Карры ... если A.zip - ваш единственный большой архив, а B.zip - архив, сгенерированный через Интернет, то используйте следующий алгоритм

  1. Извлеките все файлы из A.zip и рекурсивно (по папкам) вычислите контрольную сумму файлов, присутствующих в папке (используя cksum, md5sum и т. Д.), Где содержимое было извлечено, и сохраните эту информацию после сортировка (передача sort) в файл (скажем, A.txt)

  2. Сделайте то же самое для B.zip и сгенерируйте B.txt

  3. Сравните A.txt с B.txt, они должны быть точно такими же.

OR

Используйте unzip -l, чтобы получить списки файлов / каталогов для обоих (zip) архивов, а затем сгладить иерархию сгенерированного пользователем zip-файла и сравнить с содержимым сгенерированного сценарием zip-файла, используя нечто вроде diff. Под выравниванием иерархии я подразумеваю, что вам может потребоваться выполнить некоторую предварительную обработку в одном или обоих списках, прежде чем вы сможете провести значимое сравнение с diff.

1 голос
/ 12 февраля 2009

Создайте контрольную сумму crc для ваших файлов.

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

Контрольную сумму можно легко создать с помощью внешней программы, такой как «SFV Checker», или программно (например, .net / java включают библиотеки для этого).

1 голос
/ 12 февраля 2009

Я могу искренне рекомендовать Beyond Compare . Если вам действительно не платят, это самый большой удар для вашего (боссов) доллара.

[Редактировать] Я, кажется, сканировал по другой структуре папок , извините за это. Сравнение может сравнивать все файлы в папках с одинаковой структурой папок. У него нет (я полагаю) интеллекта для поиска совпадений в файлах в разных папках.

С уважением,
Ливны

...