Unix 'grep' для строки во всех gzip файлах во всех подкаталогах

Как делают меня grep для строки рекурсивно через все .gz файлы во всех каталогах и подкаталогах?

8
задан 27.03.2012, 17:52

4 ответа

@Steve Щебечут, почти там. Использование/dev/null как дополнительный аргумент является хорошим способом вынудить имя файла быть показанным (я буду помнить, что, Steve спасибо), но это все еще выполняет должностное лицо для каждого найденного файла - огромные издержки.

Вы хотите выполнить zgrep как несколько раз, как Вы можете, получая все возможное от каждого выполнения:

find . -iname '*.gz' -print0 | xargs -0 zgrep PATTERN

xargs предоставит как можно больше args (имена файлов) к zgrep и неоднократно выполнять его, пока это не использовало все файлы, предоставленные find команда. Используя -print0 и -0 опции позволяют этому работать, если существуют пробелы на какое-либо из имен файла или каталога.

На Mac OS X можно достигнуть того же эффекта без xargs:

find . -iname '*.gz' -exec zgrep PATTERN {} +
13
ответ дан 07.12.2019, 13:54
$ zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.

Так что-то как

find . -iname "*.gz" -exec zgrep PATTERN {} \
1
ответ дан 07.12.2019, 13:54

@aioobe почти там. Команда сделает задание, но не скажет Вам имя файла

Следующее должно сказать Вам имя файла также:

find . -iname "*.gz" -exec zgrep PATTERN {} /dev/null \;

Добавление /dev/null гарантирует, что zgrep видит два имен файлов, таким образом, он покажет Вам название файла, если он найдет строку

Править

Дальнейшее исследование показывает это для моей машины (OS/X) -exec аргумент для нахождения добавит как можно больше имен файлов (подобный пути xargs ведет себя).

1
ответ дан 07.12.2019, 13:54

Следующие работы обработка в zsh

for archive in **/*.gz; do
    echo "[${archive}] "
    gzip -dc ${archive} | grep -n "String"
done

Это может также работать в bash, ksh, и т.д...

0
ответ дан 07.12.2019, 13:54

Теги

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