Учитывая набор 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.