Как "распаковать" файл 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