Linux ищет текстовую строку из файлов.bz2 постоянно в подкаталогах
У меня есть случай, когда несколько файлов .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
Comments