Поиск текста в Linux строку от.bz2 файлы recursevely в поддиректориях

У меня есть случай, когда несколько .файлы bz2 расположены в подкаталогах. И я хочу искать текст из всех файлов, используя команды bzcat и grep command linux.

Я могу искать один-один файл, используя следующую команду:

bzcat <filename.bz2> | grep -ia 'text string' | less

но теперь мне нужно сделать это для всех файлов в подкаталогах.

4 ответов


можно использовать bzgrep вместо bzcat и grep. Это быстрее.

для grep рекурсивно в дереве каталогов используйте find:

find -type f -name '*.bz2' -execdir bzgrep "pattern" {} \;

find рекурсивно ищет все файлы с помощью *.bz2 расширение и применяет команду, указанную с -execdir для них.


существует несколько методов:

bzgrep regexp $(find -name \*.bz2)

этот метод будет работать, если количество найденных файлов не очень большой (и у них нет специальных символов в пути). В противном случае вам лучше использовать этот:

find -name \*.bz2 -exec bzgrep regexp {} /dev/null \;

обратите внимание /dev/null во втором методе. Вы используете его, чтобы сделать bzgrep печать имени файла, где regexp встретился.


просто попробуйте использовать:

bzgrep --help
grep through bzip2 files

использование: bzgrep [grep_options] pattern [files]

например, мне нужна информация grep из списка файлов по номеру 1941974:

'billing_log_1.bz'
'billing_log_2.bz'
'billing_log_3.bz'
'billing_log_4.bz'
'billing_log_5.bz'

что я могу сделать?

bzgrep '1941974' billing_log_1


непрерывный код с исправлениями bzcat:

find . -type f -name "*.bz2" |while read file
do 
    bzcat $file | grep -ia 'text string' | less
done