У меня есть несколько заархивированных файлов журналов, и я хочу найти во всех них строку. Я попробовал это, но это не работает:

find ./ -name "*.log.zip" -exec gzip -dc {} | grep ERROR \;

Это дает мне:

find: incomplete statement
grep: can't open ;

То, что я хочу, для каждого файла .log.zip, распакуйте его и grep вывод для "ОШИБКА". Делать это в AIX, для чего это стоит.

1 ответ1

0

В вашем синтаксисе есть ошибка. Найти ищет \; или \+ , но читает | , Grep пытается открыть файл с именем «;». Разница между завершением -exec точкой с запятой или плюсом заключается в том, что команда запускается один раз для всех файлов (+), а команда запускается один раз для каждого файла (;).

Попробуй это:

find ./ -name "*.log.zip" -exec zcat {} \+ | grep ERROR
# or
find ./ -name "*.log.zip" -exec sh -c 'zcat {} | grep ERROR' \;

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