2014-01-07 2 views
9

여러 .bz2 파일이 서브 디렉토리에있는 경우가 있습니다. 그리고 모든 파일에서 bzcat과 grep 명령 linux 명령을 사용하여 텍스트를 검색하려고합니다.서브 디렉토리에서 반복적으로 .bz2 파일의 Linux 검색 텍스트 문자열

나는 다음과 같은 명령을 사용하여 일대일 파일을 검색 할 수 있어요 :

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

하지만 지금은 하위 디렉토리에있는 모든 파일에 대해 위의 작업을 수행 할 필요가있다.

+0

시간이 bzcat를 시도 | grep -ira '텍스트 문자열'| 덜 – archetipo

답변

17

bzcatgrep 대신 bzgrep을 사용할 수 있습니다. 이것은 더 빠릅니다.

재귀 적 디렉토리 트리에서 grep을 find 사용하려면 다음 *.bz2 확장자를 가진 모든 파일에 대해

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

find 재귀 적으로 검색됩니다 그들에게 -execdir로 지정된 명령을 적용합니다. 발견 된 파일의 수는 매우 큰없는 경우

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

이 방법은 작동합니다 (그리고 그들이하는 Pathes에 특수 문자가없는) :

+0

좋은 것! bzgrep에 대해 몰랐으므로 접근 방법을 삭제하고 있습니다. – fedorqui

+1

방금'zgrep'에 대해 알았으므로'man bzgrep'을 시도했습니다. 고마워! :) – hek2mgl

+0

감사합니다 hek2mgl, 나는 명령을 실행하고 결과를 알려 드릴 것입니다. 검색 대상 파일이 너무 큽니다. – Semu

3

는 여러 가지 방법이 있습니다. 그렇지 않으면 다음 중 하나를 사용하는 것이 좋습니다.

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

두 번째 방법은 /dev/null입니다. 이 파일을 사용하여 bzgrep 파일 이름을 으로 인쇄하고 regexp을 찾았습니다. bzcat에 의해 수정과

0

연속 코드 :

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

명령으로 실행합니까, 아니면 bash 파일을 만들어야합니까? – Semu

+0

예, bash 파일 (예 : a.sh)에 저장 한 다음 실행 권한을 제공해야합니다. chmod + x a.sh – BMW

0

그냥 사용하려고 :

bzgrep --help 
grep through bzip2 files 

사용법 : bzgrep [grep_options] pattern [files]

예를 들어, 나는에 의해 파일의 목록에서 그렙 정보가 필요 번호 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

관련 문제