0xC*_*22L 85 gzip text-processing cat
在处理日志文件时,由于某些原因,有些最终会成为 gzipped 文件,logrotate而有些则不会。所以当你尝试这样的事情时:
$ zcat *
Run Code Online (Sandbox Code Playgroud)
你最终得到一个命令行zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gz,然后是:
gzip: xyz.log: not in gzip format
Run Code Online (Sandbox Code Playgroud)
是否有一种工具可以使用魔术字节,类似于file工作原理,并使用zcat或cat取决于结果,以便我可以将输出传输到grep例如?
注意:我知道我可以编写脚本,但我想知道是否已经有工具了。
don*_*sti 121
用-f或试试--force:
zcat -f -- *
Run Code Online (Sandbox Code Playgroud)
因为zcat只是一个运行的简单脚本
exec gzip -cd "$@"
Run Code Online (Sandbox Code Playgroud)
有很长的选项可以转化为
exec gzip --stdout --decompress "$@"
Run Code Online (Sandbox Code Playgroud)
并且,根据man gzip(强调我的):
-f --force
即使文件有多个链接,也强制压缩或解压缩
或者对应的文件已经存在,或者如果压缩数据是
从终端读取或写入终端。如果输入数据的格式不正确
被 gzip 识别,如果还给出了 --stdout 选项,则复制
输入数据而不改变标准输出:让 zcat 表现为 cat。
还:
这样我就可以将输出通过管道传输到
grep例如
你可以使用zgrep:
zgrep -- PATTERN *
Run Code Online (Sandbox Code Playgroud)
尽管请参阅下面的 Stéphane 评论。
小智 13
我完全出于同样的目的使用:
{ cat /var/log/messages ; zcat /var/log/messages*.gz ; }| grep something | grep "something else" ....
Run Code Online (Sandbox Code Playgroud)
小智 8
有一个名为 zutils 的 ztools(zcat、zgrep、..)的替代品,可以独立于后端将所有解压工具联合起来。因此,使用相同的命令,您可以透明地读取普通、lzma、gzipped、xz 文件。
它在 debian wheezy 或更新版本中可用,也可能在 redhat/centos 中可用。
该项目的页面是这里nongnu.org
一篇解释 util 用法的博客文章(noone.org)