Linux ищет текстовую строку из файлов.bz2 постоянно в подкаталогах



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



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



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


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

613   4  

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

Comments

    Ничего не найдено.