Как Вы ищете строки в файле, который в свою очередь находится в архиве?

Я могу перерыть много файлов для конкретной строки путем конвейерной обработки 'grep' и 'найти' команды.

Теперь, у меня есть приблизительно 10 zip-файлов, каждый из которых заархивировал много текстовых файлов. Есть ли какой-либо способ, которым я мог искать строку во всех текстовых файлах, заархивированных во всех тех zip-файлах, не извлекая zip-файлы?

5
задан 01.12.2015, 01:51

3 ответа

unzip -c \*.zip | grep yourtext

Вы могли использовать некоторый regexes в команде grep для подстройки сопоставления строк

На основе комментариев ниже, zgrep был бы более оптимальный вариант.

1
ответ дан 07.12.2019, 18:02

Можно также использовать команду zipgrep, которая включена с, разархивировали пакет. Например:

for z in *.zip ; do zipgrep PATTERN $z |sed "s/^/$z: /" ; done

Эта команда дает Вам подобранные имена файлов в архивах также.

2
ответ дан 07.12.2019, 18:02

Смонтируйте архивы как каталоги с помощью AVFS или zip предохранителя. Оба - файловые системы FUSE.

AVFS обеспечивает представление файловой системы в ~/.avfs где каждый архивный файл имеет связанный каталог с тем же именем плюс a # в конце.

mountavfs
grep -r PATTERN ~/.avfs/$PWD/*.zip\#/
…
unmountavfs

Zip предохранителя монтирует zip на каталог.

for z in *.zip; do mkdir "$z.d" && fuse-zip "$z" "$z.d"; done
grep -r PATTERN *.zip.z/
…
fusermount -u *.zip.d
rmdir *.zip.d
1
ответ дан 07.12.2019, 18:02

Теги

Похожие вопросы