Поиск текста в 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