압축을 풀지 않고 tar.gz에서 특정 파일을 찾는 방법은 무엇입니까?

압축을 풀지 않고 tar.gz에서 특정 파일을 찾는 방법은 무엇입니까?

tar.gz 아카이브에 포함된 특정 파일에 대해 grep 작업을 수행할 수 있는 명령을 찾고 있습니다.

예:

파일: archive.tar.gz, 여기에는 다음이 포함됩니다.

fileA.txt
fileB.txt
fileC.txt

원래 아카이브에서 파일을 추출하지 않고 단 하나의 명령으로 다른 두 개가 아닌 fileA.txt에서만 grep하고 싶습니다.

가능합니까?

나는 시도했다:

for f in /path/*.gz; do
    tar -xzf "$f" --to-command='grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern || true'
done

이 명령은 아카이브에 포함된 모든 파일에 대해 grep을 수행하지만 정확히 필요한 것은 아닙니다. 검색하려는 파일만 grep하는 명령이 필요합니다.

답변1

tar아카이브에서 어떤 파일을 처리해야 하는지 알려주세요 .

for f in /path/*.gz; do
  tar -xzf "$f" --to-command='grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern || true' fileA.txt
done

( fileA.txt명령 끝에서 tar).

답변2

tar가 추출해야 하는 파일을 제한할 수 있습니다.

GNU tar를 사용한다고 가정하면 이 --to-stdout옵션을 사용하십시오. 이는 올바르게 인용된 명령을 전달하는 것보다 쉽습니다.

for TAR_ARCHIVE in /path/*.gz; do
  TAR_FILENAME="fileA.txt"
  tar -xzf "$TAR_ARCHIVE" --to-stdout "$TAR_FILENAME" | grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern
done

답변3

우그레프옵션을 사용하여 tar.gz 파일을 검색합니다 -z.

관련 정보