Выборочно извлекать файлы из .zip-архива из командной строки

Предположим, у меня большой zip-файл (> 50 ГБ), и я хочу извлечь из него некоторые файлы из командной строки.

Чтобы получить файлы, я запускаю команду:

unzip -l myfile.zip | grep "foo" 

который дает мне список записей zip; как я могу извлечь те файлы, которые проходят через фильтр grep? Я пробовал использовать xargs unzip -j но я хотел бы получить более чистое решение, поскольку записи в zip требуют очистки бесполезной информации.

  • «Mac-стиль» распаковывается на linux
  • Подкаталоги Zip на основе find, -exec
  • Параллельно читать содержимое заархивированного файла без извлечения
  • Как создать zip-каталогов -mtime -150
  • В чем разница между gunzip и unzip?
  • Как зашифровать каталог с помощью шифрования имен файлов?
  • Ошибка распаковки, возможно ли восстановление?
  • Как я рекурсивно grep через сжатые архивы?
  • One Solution collect form web for “Выборочно извлекать файлы из .zip-архива из командной строки”

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

    Используйте что-то вроде:

     unzip -j myfile.zip '*foo*' 

    осторожно процитировать подстановочные знаки из оболочки .

    Если вы продолжите направление вывода grepping unzip , разделите заголовок и трейлер и уменьшите его до столбца имени файла:

     unzip -l myfile.zip | sed '1,3d; /--------- -------/d; $d'|cut -c31- 
    Linux и Unix - лучшая ОС в мире.