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

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

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

unzip -l myfile.zip | grep "foo" 

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

  • Можно ли создать zip-файл без использования zip-бинарного файла?
  • Я неоднократно застегиваю одну и ту же папку с файлами, но shasum продолжает меняться
  • Извлеките список .zip-файлов в один новый каталог каждый, имя каталога, которое будет взято из имени zip-файла
  • Как я рекурсивно grep через сжатые архивы?
  • как распаковать файл с другим именем
  • Как я могу перечислить все * .doc файлы в Zip-архиве, включая файлы в подкаталогах?
  • Есть ли способ использовать sed или awk для фильтрации данных внутри заархивированного файла?
  • Извлечение вложенных zip-файлов
  • 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 - лучшая ОС в мире.