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