Я могу перерыть много файлов для конкретной строки путем конвейерной обработки 'grep' и 'найти' команды.
Теперь, у меня есть приблизительно 10 zip-файлов, каждый из которых заархивировал много текстовых файлов. Есть ли какой-либо способ, которым я мог искать строку во всех текстовых файлах, заархивированных во всех тех zip-файлах, не извлекая zip-файлы?
unzip -c \*.zip | grep yourtext
Вы могли использовать некоторый regexes в команде grep для подстройки сопоставления строк
На основе комментариев ниже, zgrep
был бы более оптимальный вариант.
Смонтируйте архивы как каталоги с помощью 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