7

У меня есть иерархия каталогов, которая содержит множество файлов .gz . Я хочу быть в состоянии рекурсивно grep их для строки "foo". Из того, что я прочитал в Интернете, должно работать следующее:

zgrep -R -H "foo" .

Тем не менее, это никогда не возвращает никаких результатов. Если я заменяю точку именем файла, это работает. Например,

zgrep -R -H "foo" myFile.gz

однако, очевидно, это больше не будет рекурсивным.

Я знаю, что "foo" находится в некоторых файлах, потому что следующая команда возвращает много результатов:

find . -iname "*.gz" | xargs zgrep "output" | less

Кто-нибудь знает, почему моя рекурсивная команда zgrep не работает. Я на RHEL Linux

4 ответа4

3

Ваш почти там. Попробуй это:

zgrep -R -H "foo" *.gz

РЕДАКТИРОВАТЬ: Хмммм .... интригующе!

Согласно моему zgrep, -R (Рекурсивно) не вариант. Его просто не поддерживается. Я бы проверил, что говорит справочная страница вашего zgrep.

Одна альтернатива, которая зависит только от одного уровня подкаталогов, заключается в следующем:

zcat */*.gz | grep <needle>

Но я бы предположил, что ваша команда поиска, вероятно, лучше!

3

Вы должны установить zutils. Это заменит установленный по умолчанию и ограниченный zgrep в вашей системе рекурсивно-способным.

В системах, основанных на Debian, вы запускаете apt-get install zutils тогда вы можете zgrep -rH myword . и используйте большинство других параметров из grep, который вы знаете и любите.

2

Я обычно делаю так:

zgrep "foo" $(find -name "*.gz")

Если эта команда возвращает "Список аргументов слишком длинный", попробуйте так:

for I in $(find -name "*.gz"); do zgrep "foo" $I; done
0

Используйте сито - это супер-быстро.

sift -z foo

-z предназначен для распаковки gzips, по умолчанию он спускается в подкаталоги. Также показывает имена файлов по умолчанию (опция -H ).

PS. Благодаря вашему вопросу я обнаружил этот инструмент сегодня. Просто протестировал его, кроме необходимой вам функциональности, у меня есть 5-кратное ускорение в некоторых рабочих журналах по сравнению с zgrep .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .