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
.