zcat과 cat을 투명하게 결합하는 도구가 있나요?

zcat과 cat을 투명하게 결합하는 도구가 있나요?

로그 파일을 처리할 때 일부는 gzip 파일로 압축되지만 logrotate일부는 그렇지 않습니다. 따라서 다음과 같은 것을 시도하면:

$ zcat *

다음과 같은 명령줄이 작성되고 zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gz그 뒤에는 다음이 표시됩니다.

gzip: xyz.log: not in gzip format

file이것이 작동하는 방식과 유사하게 매직 바이트를 얻을 수 있고 결과를 사용 zcat하거나 의존하여 출력을 예를 들어 파이프할 수 있는 도구가 있습니까 ?catgrep

참고: 스크립트를 작성할 수 있다는 것을 알고 있지만 이를 위한 도구가 이미 있는지 묻고 싶습니다.

답변1

-f또는 다음을 사용해 보세요 --force.

zcat -f -- *

zcat단지 실행되는 간단한 스크립트이기 때문입니다 .

exec gzip -cd "$@"

긴 옵션을 다음으로 변환할 수 있습니다.

exec gzip --stdout --decompress "$@"

man gzip그리고 (강조) 에 따르면 :

-f--강제
      파일에 링크가 여러 개 있는 경우에도 강제 압축 또는 압축 풀기
      해당 파일이 이미 존재하거나 압축된 데이터가
      터미널에서 읽거나 터미널에 씁니다.입력 데이터가 특정 형식이 아닌 경우
      --stdout 옵션도 제공되면 gzip으로 인식되고 복사됩니다.
      표준 출력을 변경하지 않고 데이터를 입력합니다.zcat이 고양이처럼 행동하게 만들기.

반품:

이렇게 하면 출력을 grep예를 들어 파이프할 수 있습니다.

당신은 그것을 사용할 수 있습니다 zgrep:

zgrep -- PATTERN *

그러나 아래 Stéphane의 의견을 참조하십시오.

답변2

zless

이는 불행한 일인 것 같습니다 zcat. libz에는 압축된 파일과 압축되지 않은 파일의 투명한 읽기를 지원하는 API가 있기 때문입니다. 그러나 맨페이지 zcat에는 이것이 gunzip -c.

답변3

나는 같은 목적으로 사용합니다 :

{ cat /var/log/messages ; zcat /var/log/messages*.gz ; }| grep something | grep "something else" ....

답변4

이는 zcat이 바이너리인 RHEL 5.x에서 제대로 작동합니다. zcat이 스크립트인 RHEL 6.x(및 Ubuntu 12.x)에서는 실패합니다. 이것사용된원활하게 작동합니다.

zcat 사용법을 전혀 모르지만 zgrep도 압축되지 않은 파일을 제대로 처리하지 못합니다.

관련 정보