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

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

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

zipgrep ORA-1680 *.zip

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



답변

일반적으로 압축 파일 내에서 컨텐츠를 압축 해제하지 않고 컨텐츠를 검색하는 것은 불가능합니다. 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 파일 만 시도 할 수 있지만 파일의 내용과 패턴에 따라 오 탐지 및 / 또는 오 탐지를 얻을 수 있습니다.


답변

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

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


답변

에서 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


답변