即使未压缩,是否可以制作 zcat 输出文本?

rsk*_*k82 19 pipe gzip cat

问题是我有一些压缩或纯文本的数据库转储。文件扩展名等没有区别。zcat在未压缩的文件上使用会产生错误而不是输出。

是否有另cat一种足够智能的工具可以检测它获得的输入类型?

Sté*_*las 26

只需添加-f选项。

$ echo foo | tee file | gzip > file.gz
$ zcat file file.gz
gzip: file: not in gzip format
foo
$ zcat -f file file.gz
foo
foo
Run Code Online (Sandbox Code Playgroud)

(如果您不是 GNU(或像现代 BSD 中的 GNU 模拟)并且只知道文件gzip -dcfzcat -f则使用代替)。zcat.Z


god*_*eek 10

一个可移植的简单建议是使用zgrep而不是zcat,并且只使用匹配每一行的搜索模式。

zgrep $ some-file
Run Code Online (Sandbox Code Playgroud)

zcat,zgrep将愉快地处理未压缩的文件。来自人 zgrep:

zgrep - search possibly compressed files for a regular expression
Run Code Online (Sandbox Code Playgroud)

  • `zgrep` 是一个包含 `gzip` 和 `grep` 的脚本。它处理未压缩数据的原因是因为[它将`-f`选项传递给`gzip`](http://unix.stackexchange.com/a/131944/22565) (2认同)

fkr*_*iem 5

使用 GNU,gzip您可以做到zcat file 2> /dev/null || cat file。这不是 POSIX 标准,也不适用于 BSD gzip,您确实应该修复您的系统,以便所有gzipped 文件都有.gz扩展名(当然纯文本文件可能有任何扩展名,包括.gz)。