Здесь много путаницы, потому что ее нет zgrep
. У меня есть две версии в моей системе, zgrep
из gzip
и zgrep
из zutils
. Первый - это просто скрипт-обертка, который вызывает gzip -cdfq
. Он не поддерживает -r, --recursive
переключатель. 1
Последняя представляет собой c++
программу , и она поддерживает в -r, --recursive
опции.
Запуск zgrep --version | head -n 1
покажет, какой из них (если есть) является значением по умолчанию:
zgrep (gzip) 1.6
это скрипт-обертка,
zgrep (zutils) 1.3
это cpp
исполняемый файл.
Если у вас есть последний, вы можете запустить:
zgrep 'pattern' -r --format=gz /path/to/dir
В любом случае, как и предполагалось, find
+ zgrep
будет одинаково хорошо работать с любой версией zgrep
:
find /path/to/dir -name '*.gz' -exec zgrep -- 'pattern' {} +
Если zgrep
отсутствует в вашей системе (очень маловероятно), вы можете попробовать с:
find /path/to/dir -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "pattern"' {} \;
но есть существенный недостаток: вы не будете знать, где находятся совпадения, так как к совпадающим строкам нет имени файла.
1: потому что это было бы проблематично
zgrep
:zgrep - search possibly compressed files for a regular expression