여러 zip 파일에서 문자열 검색


22

SunOS 5.10에서 작업하고 있습니다. 약 200 개의 zip 파일이 들어있는 폴더가 있습니다. 각 zip 파일에는 하나의 텍스트 파일 만 포함됩니다. 모든 zip 파일의 모든 텍스트 파일에서 특정 문자열을 검색하고 싶습니다.

나는 이것을 시도했다 (문자열 "ORA-"를 포함하는 zip 파일에서 텍스트 파일을 검색한다) 그러나 그것은 작동하지 않았다.

zipgrep ORA-1680 *.zip

압축 파일을 압축 해제하지 않고 올바른 작업을 수행하는 방법은 무엇입니까?


압축 된 아카이브를 재귀 적으로 가져 오는 방법을 참조하십시오 . (요구 사항이 더 복잡했기 때문에 정확한 사본은 아닙니다.)
Gilles 'SO- 악마 그만'

답변:


26

일반적으로 압축 파일 내에서 컨텐츠를 압축 해제하지 않고 컨텐츠를 검색하는 것은 불가능합니다. zipgrep은 압축 해제 및 egrep 자체를 감싸는 쉘 스크립트 일 뿐이므로 수동으로 수행 할 수도 있습니다.

for file in *.zip; do unzip -c "$file" | grep "ORA-1680"; done

일치하는 zip 파일 목록 만 필요한 경우 다음과 같은 것을 사용할 수 있습니다.

for file in *.zip; do
    if ( unzip -c "$file" | grep -q "ORA-1680"); then
        echo "$file"
    fi
done

이렇게하면 파일을 디스크로 압축 해제하는 대신 stdout (예 : 메모리)으로 압축 해제 만합니다. 물론 grep -azip 파일 만 시도 할 수 있지만 파일의 내용과 패턴에 따라 오 탐지 및 / 또는 오 탐지를 얻을 수 있습니다.


첫 번째 옵션은 파일의 압축을 어디에서 해제합니까?
ziggy

2
unzip -c파일을 stdout으로 압축 해제합니다. 압축되지 않은 전체 파일을 다른 곳에 쓰지 않습니다.
노아

그것은 내 하루를 저장 +1 tks 많이. echo "$ file"을 추가했습니다. 압축 해제 -c "$ file"| grep -q "ORA-1680"; 파일 이름 + 결과를 알기 위해.
Mike

2
파이프로 스트리밍하는 unzip데 사용 -p하는 내 버전 !
gavenkoa

이것은 모든 단일 행 명령이 파일 이름 +1이 아닌 "표준 출력"을 반환 한 곳에서 작동합니다.
alimack

16

zipgrep단일 파일을 가져옵니다. 여러 파일에서 작동하게하려면 루프에 넣으십시오.

for i in *.zip
do
   zipgrep ORA-1680 "$i"
done

2
일치하는 경우 zip 파일 이름도 인쇄하는 한 줄 :for i in *.zip; do zipgrep TextToSearch $i && echo $i; done
baptx

4

에서 avfs 파일 시스템의 선물 모든 아카이브 파일은 파일 시스템의보기 /path/to/foo.zip디렉토리로 액세스 할 수 있습니다 ~/.avfs/path/to/foo.zip#. Solaris에 설치할 수 있는 FUSE 파일 시스템입니다. AVFS는 가장 일반적인 아카이브 파일 형식에 대한 읽기 전용 액세스를 제공합니다.

mountavfs
for z in ~/.avfs$PWD/*.zip; do
  find "$z#" -exec grep ORA-1680 {} +
done
fusermount -u ~/.avfs   # optional
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.