Я работаю над SunOS 5.10. У меня есть папка, которая содержит около 200 ZIP-файлов. Каждый почтовый файл содержит только один текстовый файл. Я хотел бы найти конкретную строку во всех текстовых файлах во всех файлах zip.
Я попробовал это (который ищет любой текстовый файл в zip-файле, который содержит строку «ORA-»), но это не сработало.
zipgrep ORA-1680 *.zip
Как правильно делать это, не распаковывая zip-файлы?
Ответы:
Как правило, поиск содержимого в сжатом файле невозможен без его разархивирования. Так как zipgrep - это всего лишь оболочка, которая включает в себя разархивирование и сам egrep, вы можете сделать это вручную:
Если вам нужен только список подходящих zip-файлов, вы можете использовать что-то вроде:
Таким образом, вы распаковываете только в стандартный вывод (т.е. в память), а не распаковываете файлы на диск. Конечно, вы можете попытаться использовать только
grep -a
zip-файлы, но в зависимости от содержимого файла и вашего шаблона вы можете получить ложные срабатывания и / или ложные отрицания.источник
unzip -c
распаковывает файл в стандартный вывод. Он не записывает весь несжатый файл в другом месте.unzip
использует-p
для потоковой передачи на канал!zipgrep
занимает один файл. Чтобы заставить его работать с несколькими файлами, поместите его в цикл:источник
for i in *.zip; do zipgrep TextToSearch $i && echo $i; done
В АВФ файловая система представляет собой вид файловой системы , где каждый архивный файл
/path/to/foo.zip
доступен как каталог~/.avfs/path/to/foo.zip#
. Это файловая система FUSE , которую вы можете установить на Solaris. AVFS обеспечивает доступ только для чтения к большинству распространенных форматов архивных файлов.источник