Назад | Перейти на главную страницу

Эквивалент grep -l для имен файлов в zip-файле

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

Лучшее, что я смог придумать, это

for i in $ZIPFILE_LIST
> do j=$(basename $i)
> unzip -l $i > /tmp/$j
> grep -l $PATTERN /tmp/$j
> rm /tmp/$j
> done

но это довольно взломано и, например, без прохождение grep вывод через sed (с различными головными болями) он расскажет вам, какие файлы вам нужны, но на самом деле не даст вам полных путей в форме, которую вы затем можете передать чему-то другому. Похоже, что это довольно распространенный вариант использования, и для этого должен быть какой-то лучший готовый инструмент или комбинация инструментов.

unzip -l files.zip | grep filename

Будет ли Модуль zipfile Python помогите решить вашу проблему?

например:

import zipfile

def findfileinzip(source_filename, pattern):
    print(pattern)
    zf = zipfile.ZipFile(source_filename,'r')
    for member in zf.namelist():
        if member.find(pattern) != -1:
            print(member)

Я думаю ты хочешь zipgrep, который установлен в стандартной версии Ubuntu (возможно, установлен в вашей системе). Это сценарий оболочки, который внутренне использует unzip и egrep.