#zip #unzip #ziparchive
#zip #разархивируйте #архив ziparchive
Вопрос:
У меня есть ZIP-архив с некоторыми фотографиями в нем. Проблема в том, что я не могу разархивировать все файлы из этого архива.
Команда разархивировать:
unzip archive.zip
Archive: archive.zip
mapname: conversion of failed
mapname: conversion of failed
mapname: conversion of failed
mapname: conversion of failed
mapname: conversion of failed
mapname: conversion of failed
mapname: conversion of failed
mapname: conversion of failed
mapname: conversion of failed
mapname: conversion of failed
mapname: conversion of failed
mapname: conversion of failed
Список файлов внутри ZIP-архива (каждый файл без имени …):
unzip -l archive.zip
Archive: archive.zip
Length Date Time Name
--------- ---------- ----- ----
61684 03-07-2019 10:01
55901 03-07-2019 10:01
71678 03-07-2019 10:01
69684 03-07-2019 10:01
57131 03-07-2019 10:01
95984 03-07-2019 10:01
69633 03-07-2019 10:01
73401 03-07-2019 10:01
79661 03-07-2019 10:01
53126 03-07-2019 10:01
68691 03-07-2019 10:01
66707 03-07-2019 10:01
--------- -------
823281 12 files
Команда тестирования разархивирования:
unzip -t archive.zip
Archive: archive.zip
testing: OK
testing: OK
testing: OK
testing: OK
testing: OK
testing: OK
testing: OK
testing: OK
testing: OK
testing: OK
testing: OK
testing: OK
Если я попробую выполнить команду разархивирования по каналу, то у меня будет один файл JPEG, который содержит все фотографии архива.
unzip -p archive.zip | cat > $(date %s%3N).jpeg
Пожалуйста, есть ли возможность разархивировать архив подобным образом?
ОБНОВЛЕНО
Когда я показываю ZIP-архив в шестнадцатеричном редакторе, то вижу, что для архивированных файлов не заданы имена. На изображении находится конец ZIP-файла, в нем содержится информация о каждом файле архива. Выделенные байты на изображении представляют информационный контейнер одного заархивированного файла.
Ответ №1:
Во-первых, ваш язык в оболочке не должен быть ASCII, я думаю, как простой пользователь Linux.
locale
Это может быть кодировка архива. На ум приходит большой порядковый номер UTF-16 / UTF-32, поскольку для букв ASCII предшествующий нулевой байт будет составлять пустую строку.
unzip -O UTF-16BE -l archive.zip
unzip -O UTF-16BE archive.zip
В противном случае потребовалось некоторое программирование, либо исправление имен, либо повторение записей и выбор собственного имени для хранения каждого файла. Подойдет Java ZipInputStream.
Я думаю, что это тот случай, когда кто-то запрограммировал архивировать каталог, но забыл указать имя файла записи.
Комментарии:
1. Спасибо. Я использую OSX с UTF-8. Я пробую WinRAR внутри виртуальной машины под Windows 7, но это та же проблема, я не могу разархивировать файлы из архива.
2. Обычный zip-файл начинается с двух байтов «PK», волшебного cookie. Я вижу это дважды (zip в zip?) Вам нужно запрограммировать.
3. На изображении показан конец ZIP-файла. В конце ZIP-файла находится волшебный нижний колонтитул, он содержит информацию о каждом файле внутри архива.
4. Я ожидал, что инструмент с графическим интерфейсом, такой как 7zip, WinZip, …, сможет выбрать запись и сохранить ее под другим реальным именем.
5. Я пробую WinRAR, у него есть опция переименования файла внутри архива, или он может выполнять предварительный просмотр файла, или выборочную распаковку файла, но безуспешно.