매우 오래 실행되고 많은 출력을 생성하는 배치 시스템에서 작업이 있습니다. 실제로 배치 노드가 작업 영역을 채우고 충돌하지 않도록하기 위해 gzip을 통해 표준 출력을 파이프해야합니다.
longscript | gzip -9 > log.gz
작업이 실행되는 동안 작업의 출력을 조사하고 싶습니다. 그래서 이렇게합니다 :
gunzip log.gz
이것은 대용량 파일 (몇 GB)이기 때문에 매우 오래 실행됩니다. 실행 중에 생성되는 출력 파일을 볼 수 있고 빌드하는 동안 볼 수 있습니다.
tail log > some-line-of-the-log-file tail log > some-other-line-of-the-log-file
그러나 궁극적으로 gzip은 끝을 만납니다. gzipped 파일의. 작업이 여전히 실행 중이고 gzip이 여전히 파일을 쓰고 있기 때문에 아직 적절한 바닥 글이 없으므로 다음과 같은 일이 발생합니다.
gzip: log.gz: unexpected end of file
이후 추출 된 로그 gzip은 손상된 추출 데이터가 나에게 쓸모 없다고 생각하므로 파일이 삭제됩니다. 하지만 동의하지 않습니다. 마지막 두 줄이 뒤섞여 있어도 출력은 여전히 나에게 매우 흥미 롭습니다.
“손상된”파일을 유지하도록 gzip을 어떻게 설득 할 수 있습니까?
댓글
답변
파일의 맨 끝 부분과 별도로 zcat
(또는 gzip -dc
또는 gunzip -c
) :
zcat log.gz | tail
또는
zcat log.gz | less
또는
zless log.gz
gzip
는 명백한 이유로 버퍼링을 수행하므로 (데이터를 청크로 압축해야 함) 프로그램이 일부 데이터를 출력 했더라도 해당 데이터가 아직 log.gz
에 없을 수 있습니다. 파일.
압축되지 않은 로그를
zcat log.gz > log
…와 함께 저장할 수도 있습니다.하지만 분명히 처음에 출력을 압축하는 이유입니다.
댓글
- 신
gunzip < log.gz
참조 div id = “a15 d60b5bc “>
zcat
는 .Z
파일에서만 작동합니다.
답변
내가 올바르게 이해했다면 여전히 성장하는 gzip으로 tail -f
와 같은 작업을하고 싶습니다. 파일 : 나는 (다른 것들 중에서) 그렇게 할 수있는 gztool 을 개발했습니다 :
$ gztool -T log.gz
필요할 때 새 데이터를 기다리면서 콘솔에 지속적으로 출력합니다.
gztool
도 색인 파일 (log.gzi
이 경우) 거의 즉시 gztool
를 사용하여 gzip 데이터에 대한 향후 테일 또는 기타 임의 액세스를 수행합니다. 인덱스를 생성하지 않으려면 (0.3 % / gzip 크기이고 처리 시간을 늘리지 않더라도) -W
를 사용하여 생성하지 않을 수 있습니다.
답변
파일을 분할하고 각 파일을 gzip 할 수 있습니다. https://stackoverflow.com/a/2016918/3090950
어쨌든 명령을 상세 모드로 실행할 수 있습니까? 이것은 당신에게 더 많은 정보를 제공 할 것입니다.
gunzip -c
는 출력을 stdout에 기록합니다. 아마도 ' 당신이 찾고있는 것은 무엇입니까? 원본은 변경되지 않고 유지됩니다.