“少”不会自动解压缩压缩文件


55

在Fedora / Redhat / CentOS上,该less命令似乎可以神奇地检测到gzip压缩文件并即时对其进行解压缩,因此您可以执行以下操作:

less my_stuff.csv.gz

我刚刚注意到这在Ubuntu 11上不起作用

less my_stuff.csv.gz
"my_stuff.csv.gz" may be a binary file.  See it anyway? 

我一直在检查我的CentOS VM,看是否有一些使它起作用的shell别名魔术,但似乎没有。gzip支持刚刚内置在CentOS二进制文件中吗?

如果有人知道它在CentOS上如何工作和/或如何使其在Ubuntu上工作,我将不胜感激。

我知道我能做

zcat my_stuff.csv.gz | less

但这会使我的键盘磨损更快。


2
在Ubuntu 16.04上less myfile.txt.gz可以直接使用。
巴勃罗

Answers:


42

less默认情况下不执行此操作,但是默认情况下会有一行~/.bashrc更改默认行为:

[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

确保不删除或注释此行。
有了这个功能,您就可以在不知道的情况下分页已压缩和未压缩的文件,例如

less /var/log/dpkg.log*

其中一些日志可以压缩,而另一些则不能压缩。

对于通过root访问的根帐户,sudo您不能做同样的事情,但是有两种解决方法:

  1. sudo zless file*
  2. sudo -E less file*

在我使用的第一种情况下zless,它也适用于非压缩文件。
在第二篇文章中,我添加了保留环境变量的-E选项sudo,以减少您期望的工作量。


1
默认情况下,.bashrc中不存在第一行吗?我不记得添加了它,它在这里无缝运行(10.4)。
johanvdw 2011年

2
@johanvdw:是的,我说:“默认情况下有一行~/.bashrc。” OP可以修改自己的~/.bashrc
enzotib

我只是想补充一下,在提到的rhel OS可以正常工作的地方,您将在env中看到以下内容:LESSOPEN=|/usr/bin/lesspipe.sh %s这是由包含[ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="|/usr/bin/lesspipe.sh %s"添加到/etc/profile.d/less.sh
KHobbits

25

较少的无法读取gzip压缩文件的文件,可以在其手册页中进行检查。在Ubuntu和大多数发行版中都有一个默认安装的脚本,称为zless,可以按照您的描述工作。

所以答案是使用:

zless my_stuff.csv.gz

Fedora与Ubuntu的区别在于Fedora设置了环境变量LESSOPEN来强制参数通过lesspipe:

echo $LESSOPEN
||/usr/bin/lesspipe.sh %s

请注意,此命令在Ubuntu中不起作用。


在Ubuntu zless上,shell脚本使用lesslesspipe作为其核心,因此less不能成为的符号链接zless。我认为在其他发行版中没有什么不同。
enzotib

哦...您让我启动了Fedora安装程序;)。编辑。
哈维尔·里维拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.