Пришел немного позже, имел аналогичную проблему и смог решить с помощью;
zcat -r /some/dir/here | grep "blah"
Как подробно здесь;
http://manpages.ubuntu.com/manpages/quantal/man1/gzip.1.html
Однако, это не показывает исходный файл, из которого был получен результат, а вместо этого показывает "(стандартный ввод)", поскольку он поступает из канала. zcat, похоже, также не поддерживает вывод имени.
С точки зрения производительности, это то, что мы получили;
$ alias dropcache="sync && echo 3 > /proc/sys/vm/drop_caches"
$ find 09/01 | wc -l
4208
$ du -chs 09/01
24M
$ dropcache; time zcat -r 09/01 > /dev/null
real 0m3.561s
$ dropcache; time find 09/01 -iname '*.txt.gz' -exec zcat '{}' \; > /dev/null
0m38.041s
Как видите, использование метода find|zcat
значительно медленнее, чем использование zcat -r
при работе даже с небольшим объемом файлов. Мне также не удалось заставить zcat вывести имя файла (с помощью -v
, очевидно, будет выводиться имя файла, но не в каждой строке). Может показаться, что в настоящее время не существует инструмента, который обеспечивал бы согласованность как по скорости, так и по имени с помощью grep (то есть опция -H
).
Если вам нужно определить имя файла, к которому относится результат, вам нужно будет либо написать свой собственный инструмент (это можно сделать из 50 строк кода Python), либо использовать более медленный метод. Если вам не нужно указывать имя, используйте zcat -r
.
Надеюсь, это поможет