ugrep을 시도해보세요

ugrep을 시도해보세요

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

이것을 시도했지만("ORA-" 문자열이 포함된 텍스트 파일에 대해 zip 파일을 검색합니다) 작동하지 않습니다.

zipgrep ORA-1680 *.zip

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

답변1

일반적으로 어떤 방식으로든 압축을 풀지 않으면 압축된 파일의 내용을 검색할 수 없습니다. zipgrep은 unzip과 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

이렇게 하면 파일을 디스크에 압축 해제하는 대신 표준 출력(예: 메모리)으로만 압축을 풀 수 있습니다. 물론 zip 파일만 사용해 볼 수도 있지만 grep -a파일 내용과 패턴에 따라 거짓 긍정 및/또는 거짓 부정이 발생할 수 있습니다.

답변2

zipgrep파일이 필요합니다. 여러 파일에서 작동하게 하려면 루프에 넣으세요.

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

답변3

이것AVFS/path/to/foo.zip파일 시스템은 각 아카이브 파일이 디렉터리로 액세스할 수 있는 파일 시스템 보기를 제공합니다 ~/.avfs/path/to/foo.zip#. 그것은퓨즈Solaris에 설치할 수 있는 파일 시스템입니다. AVFS는 가장 일반적인 아카이브 파일 형식에 대한 읽기 전용 액세스를 제공합니다.

mountavfs
for z in ~/.avfs$PWD/*.zip; do
  find "$z#" -exec grep ORA-1680 {} +
done
fusermount -u ~/.avfs   # optional

답변4

ugrep을 시도해보세요

우그레프zip, gz, tar, tgz, bz2, lz4, zstd, pax, cpio 및 기타 유형의 압축 파일 및 아카이브를 반복적으로 검색합니다.옵션-z.

관련 정보