zcat / gzcat在linux下工作,而不是在osx上。 一般的linux / osx兼容性

首先是具体问题:在linux中,我使用zcat来列出一个.zip文件。 在osx中​​,zcat似乎自动将.Z添加到文件名中。 各种各样的人build议用gzcatreplacezcat; 但是,gzcat抱怨文件不是gzip格式!

'文件'显示这个:…压缩归档数据,至lessv2.0提取

所以zcat和gzcat都不能在osx中​​工作,我该怎么办?

我在bash中有一个中等大小的脚本,它使用zcat / gzcat,sed awk和其他基本实用程序来处理一些文件。 我想复制我的OSX笔记本电脑上的环境,所以我可以脱机工作。 任何一般的build议如何我可以避免这种痛苦? 我希望这是一个相当常规的工作stream程,因此必须由其他人来整理。

你是对的。 这是烦人的行为。

 $ 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 

我知道这是一个古老的问题。 但是,我发现了一个更古老的github线程的解决scheme。

您可以简单地使用与zcat类似的gunzip -c ,而不会在Mac OS X上发生错误。

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

你可以在Mac OS X上安装GNU utils,比如使用自制软件 (运行brew install coreutils gnu-sed ,安装gzcat gsed )。 这将为您提供每个命令的GNU实现。

然后,为了让你的生活更轻松,为每个命令(例如sed=gsed ,然后使用$sed )创build一个variables,或者简单地在你编写的任何脚本alias sed=gsed它们别名(例如alias sed=gsed )。 为了您的方便,我为此写了一个Gist: gnu-tools-for-mac.sh 。 把这个代码放在脚本的顶部。

使用GNU实现压缩和提取档案。 我想说你不能混用OS X和GNU实现的用法。

gzip(1)的Mac OS X版本不支持读取zip文件 。 从手册页:

这个版本的gzip也可以解压缩使用compress(1)bzip2(1)压缩的文件。

但是Linux(GNU)版本呢 。

gunzip目前可以解压缩由gzipzipcompresscompress -Hpack创build的文件。

第三方已经为Mac OS X打包了GNU gzip; 你可以从networkingsearch中find这些。 这可能是阻力最小的path。