Как составить список содержимого всех файлов .zip в папке и grep для конкретного файла?

28

У меня 348 zip-файлов, и я хочу найти файл, который находится в одном из zip-файлов, unzip -lне работает с подстановочными знаками?

Как я могу перечислить содержимое всех .zipфайлов и grepчерез объединенный список всех файлов, содержащихся в почтовых индексах?

Эдуард Флоринеску
источник

Ответы:

17

Использование zipinfoявляется прекрасным решением здесь. Однако, в общем, когда вы хотите применить команду к списку файлов, а команда не принимает список файлов, вы можете использовать forцикл:

for file in *.zip; do
    unzip -l "$file"
done \
| grep "\.zip\|setup"

Если в файле, который вы ищете, есть пробелы, такие как:, your fileв регулярном выражении grep вы должны экранировать все пробелы с обратной косой чертой grep "\.zip\|your\ file".

Конрад Рудольф
источник
Работает отлично, единственная проблема в том, что он не показывает название почтового индекса,
Эдуард Флоринеску
Я отредактировал ваше сообщение и добавил регулярное выражение, чтобы отобразить также имя файла, в котором находится настройка, +1 и принять
Эдуард Флоринеску
Ах, да, я забыл цитаты вокруг аргумента unzip, как неловко.
Конрад Рудольф
1
@JaySullivan Не используйте этот код, он потерпит неудачу для путей, содержащих пробелы. Никогда не передавайте вывод ls. Вы могли бы использовать findвместо этого.
Конрад Рудольф
12

Вы можете использовать zipinfo. Он включен в стандартную установку Ubuntu. Проверьте страницу руководства для получения дополнительной информации.

Например, чтобы найти шаблон setupв группе файлов zip в текущем каталоге, используйте эту команду:

find ./ -iname *zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup
Анвар
источник
Я получаю caution: filename not matched: case1.zip... caution: filename not matched: case348.zipза каждый почтовый индекс, протестированный на двух ОС Ubuntu, 11.10 и 12.04.
Эдуард Флоринеску
@EduardFlorinescu Попробуйте обновленный ответ. Хотя ответ работал на меня
Анвар
проблема в том, что файл может содержать это, setupи он помещает ту же ошибку, хотя он работает так:zipinfo -l * | grep "setup"
Эдуард Флоринеску
Я отредактировал ответ. Я думаю, что теперь это более надежно
Анвар
1
Спасибо, +1 за усилия, но все равно это не сработает, если в имени файла zip есть пробелы.
Эдуард Флоринеску
6

Чтобы составить список файлов в zip-архиве, вы можете использовать следующую команду.

unzip -l

Чтобы выполнить сжатие сжатого архива, вы должны использовать утилиты сжатого архива, созданные для работы с этим типом формата архива.

Для почтовых архивов:

zipgrep --help  
usage: zipgrep [egrep_options] pattern zipfile [members...]
Uses unzip and egrep to search the zip members for a string or pattern.

Для архивов tar:

zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.

OPTIONs are the same as for 'grep'.

Есть несколько других инструментов, которые также работают с архивами. Вы можете передать результат в grep, чтобы сделать то же самое.

zcat
zcat my.archive.zip | grep "some text"

Или вы можете использовать функцию поиска этих инструментов

zless
zmore
nelaaro
источник