zcat / gzcat은 osx가 아닌 Linux에서 작동합니다. 일반적인 리눅스 / OSX 호환성


50

먼저 특정 문제 : Linux에서는 zcat을 사용하여 .zip 파일을 나열합니다. osx에서 zcat은 파일 이름에 .Z를 자동으로 추가하는 것 같습니다. 다양한 사람들이 zcat을 gzcat으로 대체 할 것을 제안합니다. 그러나 gzcat은 파일이 gzip 형식이 아니라고 불평합니다!

'file'은 이것을 보여줍니다 : ... 압축을 풀기 위해 최소한 v2.0의 Zip 아카이브 데이터

따라서 zcat 또는 gzcat은 osx에서 작동하지 않습니다. 어떻게해야합니까?

zcat / gzcat, sed awk 및 기타 기본 유틸리티를 사용하여 여러 파일을 처리하는 bash에 중간 크기의 스크립트가 있습니다. osx 랩톱에서 해당 환경을 복제하여 오프라인으로 작업 할 수 있습니다. 그러한 고통을 피할 수있는 방법은 무엇입니까? 나는 이것이 상당히 일상적인 워크 플로우이므로 다른 사람들이 정리해야한다고 생각합니다.


2
Zip 보관 데이터 인 경우 gzip 형식 이 아닙니다 !
Michael Hampton

@MichaelHampton 나는 리눅스에서 잘 zcat 할 수 있습니다. zcat 또는 gzcat은 osx에서 작동하지 않습니다. 어떻게 해결할 수 있습니까? 내가 설치할 수있는 다른 유틸리티 세트가 리눅스와 osx 모두에서 작동합니까? 이 스크립트는 내 자신의 스크립트이므로 간단하게 변경할 수는 있지만 변경할 수 있습니다. 나는 리눅스 / OSX 환경을 모두 제어하므로 둘 다에 간단한 설치를 할 수 있습니다.
user23398

나는 그것이 일상이라고 말하지 않을 것입니다. 나는 일반적으로 zip압축 파일을 다루지 않고 사용 gzip합니다.
Michael Hampton

답변:


89

네 말이 맞아 성가신 행동입니다.

$ zcat foo.txt.gz 
zcat: can't stat: foo.txt.gz (foo.txt.gz.Z): No such file or directory

이 시도:

$ zcat < foo.txt.gz 
asdfadsf

2
이것은 OS X에서도 잘 작동합니다.
Valerio Schiavoni

1
분명히 내 대답은 틀렸다. 리눅스는 zcat읽을 수 .zip.Z파일. 여기서 문제는 stdin과 named 파일 중 하나가 아니며, 프로그램의 Linux 관리자가 gzcat많은 관련없는 파일 형식을 읽도록 수정 된 것입니다.
vy32

이것을 다른 프로세스에 어떻게 파이프합니까?
Petah

사용하여 |다른 프로세스에 파이프 :cat < foo.txt.gz | wc
vy32

이것은 적어도 OSX에서 문제를 해결합니다
jimh

18

나는 이것이 오래된 질문이라는 것을 안다. 그러나 더 오래된 github thread 에서 해결책을 찾았습니다 .

Mac OS X에서 오류없이 gunzip -c비슷한 방식으로 간단히 사용할 수 있습니다.zcat

$ gunzip -c 20150707_backup.sql.gz | mysql -u mysql_user -p

13

예를 들어 homebrew를 사용하여 Mac OS X 용 GNU utils를 설치할 수 있습니다 (run brew install coreutils gnu-sed, gzcatet al. 및. 설치 gsed). 이것은 각 명령의 GNU 구현을 제공합니다.

그런 다음 인생을 편하게하려면 각 명령마다 변수를 만들거나 (예 : 이후에 sed=gsed사용 $sed), alias sed=gsed작성하는 스크립트에서 단순히 별칭을 지정하십시오 (예 :). 귀하의 편의를 위해 Gnu-tools-for-mac.sh에 대한 요점을 작성했습니다 . 이 코드를 스크립트 위에 넣으십시오.

아카이브를 압축하고 추출하기 위해 GNU 구현을 사용하십시오. OS X와 ​​GNU 구현을 혼합하여 사용할 수 없다고 말하고 싶습니다.


3
당신은 선택적으로 추가 할 수 있습니다 /usr/local/opt/coreutils/libexec/gnubin당신에 PATH포함하지 않는이를 사용할 것이다, g접두사.
bfontaine

3

나는 이것을 시도해 보았고 매우 흥미로운 것을 발견했습니다! 를 들어 gz파일, 우리는 실행 것으로 예상된다 gzcat맥 OS에.

해결책 1

  • 사용 gzcat /path/to/file.gz하면 작동합니다.
  • 를 사용 zcat /path/to/file.gz하면 오류가 발생합니다.

해결책 2

  • 파일을 파이프 zcat하면 작동합니다.
  • 예를 들어 cat /path/to/file.gz | zcat작동합니다.

이게 도움이 되길 바란다!


0

Mac OS X 버전은 gzip(1) zip 파일 읽기를 지원하지 않습니다 . 매뉴얼 페이지에서 :

이 버전의 GZIP는 또한 사용하여 압축 파일을 압축 해제 할 수 compress(1)또는 bzip2(1).

그러나 Linux (GNU) 버전은 .

gunzip현재에 의해 생성 된 파일 압축을 풀 수 있습니다 gzip, zip,을 compress, compress -H또는 pack.

타사는 Mac OS X 용 GNU gzip을 패키지했습니다. 웹 검색에서 찾을 수 있습니다. 아마도 저항이 가장 적은 경로 일 것입니다.


웹을 검색하고 새 소프트웨어를 설치하는 것이 결코 저항의 경로 가 아닙니다 .
vy32

0

웃기는, bash-script를 실행할 때 동일한 문제가 발생 bash somescript.sh하여 gzcat내부에 for-loop를 실행 했습니다. 그러나이 일을 시도 내부somescript.sh -script ... :

  1. zcat < file.txt.gz
  2. brew install coreutils이미 설치 했지만 그럼에도 불구하고 다시 설치했습니다.brew reinstall coreutils
  3. gunzip -c file.txt.gz

... 아무것도 ...

그러나 디렉토리에 대한 참조도 사용했습니다.

SOMEDIR="~/DIR1/DIR2/DATA"

로 해석되어 ~/DIR1/DIR2/DATA분명히 bash-script 내에서 작동하지 않습니다 macOS. 이것은 효과가 있었다 :

SOMEDIR="${HOME}/DIR1/DIR2/DATA"

로 해석됩니다 /Users/someuser/DIR1/DIR2/DATA. 나는 왜 macOS-BASH-techie 전문가가 아닌지 모르겠지만 원래 코드와 함께 작동했습니다 ...

gzcat file.txt.gz | awk '{ print $1, $2, $3, $4, $5, $6 }' > ${SOMEDIR}/new.file.txt.

... somescript.sh-script.

누군가에게 유용 할 수도 있습니다.

베스트,

샌더

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.