首先是具体问题:在 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
,将安装gzcat
et 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"