首先是特定的问题:
在linux中,我使用zcat列出一个.zip文件。在osx中​​,zcat似乎会自动在文件名后附加.Z。各种各样的人建议用gzcat代替zcat。但是,gzcat抱怨文件不是gzip格式!

'file'显示以下内容:
...压缩存档数据,至少提取v2.0即可

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

我在bash中有一个中等大小的脚本,该脚本使用zcat / gzcat,sed awk和其他基本实用程序来处理许多文件。我想在osx笔记本电脑上复制该环境,以便可以脱机工作。有什么一般建议可以避免这种痛苦吗?我希望这是一个相当常规的工作流程,因此必须已被其他人整理。

评论

如果是Zip存档数据,则不是gzip格式!

@MichaelHampton我可以在Linux上运行zcat。 zcat和gzcat都不能在osx上运行。那么我该如何解决呢?我是否可以安装另一套可以在linux和osx上运行的实用程序?这些脚本是我自己的,因此我可以更改它们(尽管我想使它们保持简单)。我也同时控制着linux / osx环境,因此我也可以在两者上进行简单的安装。

我不会说这很常规。我通常使用zip处理zip文件,而不使用gzip。

#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


评论


在OS X上可以正常工作。

– Valerio Schiavoni
2015年1月25日14:18

显然我的答案是错误的。 Linux zcat将读取.zip和.Z文件。这里的问题不是stdin与命名文件之一,而是该程序的Linux维护者修改gzcat来读取大量不相关的文件类型。

–vy32
15年4月4日在12:54

我们如何将其传送到另一个进程?

–佩塔
17-10-9在8:29

使用|传送到另一个进程:cat
–vy32
17-10-11在4:24

这将至少在OSX上解决您的问题

– Jimh
17年11月14日在1:35

#2 楼

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

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


#3 楼

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

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

使用GNU实现压缩和提取档案。我会说您不能混合使用OS X和GNU实现。

评论


您也可以将/ usr / local / opt / coreutils / libexec / gnubin添加到PATH,这将使它们在不带g前缀的情况下可用。

–bfontaine
2014年7月7日在17:56

#4 楼

我只是尝试一下,发现一些非常有趣的东西!对于gz文件,我们应该在Mac OS上运行gzcat。给您一个错误。

解决方案2


将文件输入到gzcat /path/to/file.gz,它将起作用。 br />
我希望这会有所帮助!

#5 楼

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


此版本的gzip还能够解压缩使用compress(1)bzip2(1)压缩的文件。但是,Linux(GNU )版本。


gunzip当前可以解压缩由gzipzipcompresscompress -Hpack创建的文件。适用于Mac OS X的gzip;您可以通过网络搜索找到这些内容。这可能是阻力最小的路径。

评论


搜索网络和安装新软件绝不是阻力最小的途径。

–vy32
17-10-11在4:25

#6 楼

有趣的是,当执行bash -script bash somescript.sh时,我遇到了同样的问题,该脚本在其中执行了带有gzcat的for循环。但是请尝试在somescript.sh -script ...中进行以下操作: /> zcat < file.txt.gz

...一无所有...

但是我还使用了对目录的引用:

brew install coreutils

哪个被解释为brew reinstall coreutils,显然在gunzip -c file.txt.gzSOMEDIR="~/DIR1/DIR2/DATA" -script内不起作用。可行:

~/DIR1/DIR2/DATA

哪个被解释为bash。我不知道为什么-我不是专业的macOS-BASH技术人员-但它与我的原始代码配合使用。 ..在我的macOS脚本中。

也许对某人有用。

#7 楼

代替
zcat filename.gz | grep "hello"

使用
gunzip -c filename.gz | grep "hello"