Zip-архив содержит файлы без имен, как его разархивировать?

#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, у него есть опция переименования файла внутри архива, или он может выполнять предварительный просмотр файла, или выборочную распаковку файла, но безуспешно.