问题是我有一些压缩或纯文本的数据库转储。文件扩展名等没有区别。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 -dcf,zcat -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)
使用 GNU,gzip您可以做到zcat file 2> /dev/null || cat file。这不是 POSIX 标准,也不适用于 BSD gzip,您确实应该修复您的系统,以便所有gzipped 文件都有.gz扩展名(当然纯文本文件可能有任何扩展名,包括.gz)。