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

26

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

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

    
задан Eduard Florinescu 05.10.2012 в 11:19
источник

3 ответа

16

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

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

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

    
ответ дан Konrad Rudolph 05.10.2012 в 16:06
источник
11

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

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

find ./ -iname *zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup
    
ответ дан Anwar 05.10.2012 в 11:22
6

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

unzip -l

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

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

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 05.10.2012 в 11:35