Как "распаковать" файл ZIM?

У меня есть файл ZIM, и я хотел бы взглянуть на его содержание. В частности, посчитайте количество статей и изображений, и, возможно, просматривать изображения.

Как это сделать? Желательно в Linux, но инструкции для других систем тоже в порядке.

Я не хочу считать изображения, открывая ZIM в Kiwix, просматривая все тысячи страниц и считая вручную.

Это не несжимаемо ни XZ, ни ZIP:

$ unxz wikivoyage_en_all_2015-09.zim
unxz: wikivoyage_en_all_2015-09.zim: File format not recognized

$ zipinfo wikivoyage_en_all_2015-09.zim
Archive:  wikivoyage_en_all_2015-09.zim
[wikivoyage_en_all_2015-09.zim]
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
zipinfo:  cannot find zipfile directory in one of wikivoyage_en_all_2015-09.zim or
          wikivoyage_en_all_2015-09.zim.zip, and cannot find wikivoyage_en_all_2015-09.zim.ZIP, period.

1 ответ

Решение

Самый простой способ - использовать команду zimdump, часть Zimlib.

Пример вывода:

zimdump -F wikivoyage_en_all_2015-09.zim
count-articles: 84897
uuid: 9213375a-53f4-819c-47ed-41fc87e7028f
article count: 84897
mime list pos: 80
url ptr pos: 193
title idx pos: 679369
cluster count: 40711
cluster ptr pos: 5169080
checksum pos: 468245393
checksum: 05b9bbf3b6d0c955b6ee74a3f929d911
main page: 44192
layout page: -

Не уверен, что все это означает, но по крайней мере количество статей доступно.

-D Опция сбрасывает все в каталоге.

zimdump -D name_of_dir file.zim

Я попытался выполнить ответ @Nicolas Raoul выше на Mac, но возникли проблемы с построением zimdump из источника и не смог найти никаких двоичных файлов.

После некоторого рытья я обнаружил zimdump был двоичным файлом в alpine, поэтому самым простым подходом для меня было запустить zimdump в докере.

Создайте текстовый файл с именем Dockerfile с этим содержанием:

FROM alpine:edge

# add the repository that contains libzim and zim-tools
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories

# Installing dependencies
RUN apk update && apk add libzim zim-tools

Затем запустите:

docker build - < Dockerfile

Создайте образ докера:

docker build -t zimdump .

Прыгайте через обручи, чтобы смонтировать и запустить zimpdump:

docker run -v $(pwd):/app -w /app -it zimdump zimdump -D . file.zim

Другие вопросы по тегам