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 -a
zip 파일 만 시도 할 수 있지만 파일의 내용과 패턴에 따라 오 탐지 및 / 또는 오 탐지를 얻을 수 있습니다.
답변
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