Извлечение одного файла из разбиенного zip-архива

Вопрос или проблема

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

Одно из применений раздельных архивов – хранение большого архива на нескольких съемных носителях. Для раздельного архива с 20 частями файлы обычно называются (замените ARCHIVE на имя вашего архива) ARCHIVE.z01, ARCHIVE.z02, …, ARCHIVE.z19, ARCHIVE.zip. Обратите внимание, что последний файл – это файл .zip. В отличие от этого, спанированные архивы представляют собой оригинальный многодисковый архив, который обычно требует дискет и использует метки томов для хранения номеров дисков. zip поддерживает раздельные архивы, но не спанированные архивы, хотя существует процедура для преобразования раздельных архивов нужного размера в спанированные архивы. Обратное также верно, когда каждый файл спанированного архива может быть скопирован в файлы с вышеуказанными именами для создания раздельного архива.

Теперь я хотел бы восстановить некоторые файлы из zip-архива. Для этого мне нужно прочитать индексный файл в ARCHIVE.zip, который перечисляет все содержащиеся файлы, используя zip -l archive.zip. Как мне узнать, в каком архиве хранится файл? Допустим, файл, который я хотел бы сохранить, находится в archive.z03. Как я могу извлечь файл из archive.z03 без переноса всех файлов обратно, объединения всего в один zip-файл и извлечения его?

Для простоты файлы хранятся без сжатия, поэтому я полагаю, их можно читать напрямую. Для создания zip-архивов для тестирования: zip -r -s 500M -0 archive.zip /path/to/files

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

Ответ или решение

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

Понимание Структуры Архива

Когда вы создаете разделенный ZIP-архив, он делится на несколько частей: ARCHIVE.z01, ARCHIVE.z02, …, ARCHIVE.z19 и конечный файл ARCHIVE.zip. Важно отметить, что последний файл (архив с расширением .zip) содержит метаданные и структуру архива, тогда как остальные части содержат фактические данные. Если файлы в архиве хранятся в несжатом виде (с помощью опции -0), это упрощает задачу, так как файлы находятся в виде, близком к прямой последовательности данных.

Извлечение Конкретного Файла

1. Использование команды zip

Для начала, вы можете получить список файлов в архиве с помощью команды:

zip -l ARCHIVE.zip

Это покажет вам содержимое архива, включая пути к файлам и их размеры. Если вы хотите извлечь конкретный файл, например, example.txt, вам, вероятно, нужно будет знать, в какой части архива он находится. Команда zip не предоставляет этой информации напрямую, но она указывает на то, что все файлы должны быть доступны начиная с последнего .zip файла.

2. Извлечение из конкретного файла архива

К сожалению, команда zip не позволяет извлекать файлы непосредственно из промежуточных .z01, .z02 и так далее. Но вы можете использовать команду unzip, которая будет автоматически искать в нужных частях архива. Вы можете попробовать следующую команду:

unzip ARCHIVE.zip example.txt

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

3. Работа с несжатыми данными

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

Например, если вы знаете начальный и конечный байты файла (это можно сделать с помощью анализа содержания архивов), вы можете указать диапазон байтов, который вам нужен.

Итог

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

Заключение

Надеюсь, эта информация была полезной для вас. Работа с архивами и файлами — важная часть управления данными, и понимание методов извлечения данных из стандартных форматов (таких как ZIP) может значительно увеличить вашу эффективность в обработке больших объемов информации.

Оцените материал
Добавить комментарий

Капча загружается...