zcat/gzcat 在 linux 上运行,在 osx 上不行。一般 linux/osx 兼容性

zcat/gzcat 在 linux 上运行,在 osx 上不行。一般 linux/osx 兼容性

首先是具体问题:在 Linux 中,我使用 zcat 列出 .zip 文件。在 osx 中,zcat 似乎会自动将 .Z 附加到文件名中。很多人建议用 gzcat 替换 zcat;但是,gzcat 抱怨文件不是 gzip 格式!

‘file’ 显示:...Zip 存档数据,至少需要 v2.0 才能提取

因此 zcat 和 gzcat 都无法在 osx 中运行,我该怎么办?

我在 bash 中有一个中等大小的脚本,它使用 zcat/gzcat、sed awk 和其他基本实用程序来处理大量文件。我想在我的 osx 笔记本电脑上复制该环境,以便我可以离线工作。有什么一般建议可以避免这种痛苦吗?我估计这是一个相当常规的工作流程,所以一定是由其他人整理出来的。

答案1

你说得对。这是一种令人讨厌的行为。

$ 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

我知道这是一个老问题。不过,我从一个更老的问题中找到了解决方案。github 线程

您可以简单地使用与Mac OS X 上gunzip -c类似的、没有错误的方法。zcat

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

答案3

您可以安装适用于 Mac OS X 的 GNU 实用程序,例如使用自制(运行brew install coreutils gnu-sed,将安装gzcatet al. 和gsed)。这将为您提供每个命令的 GNU 实现。

然后,为了让你的生活更轻松,为每个命令创建一个变量(例如sed=gsed,然后使用$sed),或者alias sed=gsed在你编写的任何脚本中简单地为它们添加别名(例如)。为了方便起见,我为此写了一个要点:gnu-tools-for-mac.sh. 将此代码放在(或包含)脚本顶部。

使用 GNU 实现来压缩和提取档案。我认为你不能混合使用 OS X 和 GNU 实现。

答案4

代替

zcat filename.gz | grep "hello"

使用

gunzip -c filename.gz | grep "hello"

相关内容