"less" 不会自动解压缩 gzipped 文件

And*_*ewR 64 gzip less

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

less my_stuff.csv.gz
Run Code Online (Sandbox Code Playgroud)

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

less my_stuff.csv.gz
"my_stuff.csv.gz" may be a binary file.  See it anyway? 
Run Code Online (Sandbox Code Playgroud)

我一直在检查我的 CentOS 虚拟机,看看是否有一些 shell 别名魔法可以使它工作,但似乎没有。CentOS 二进制文件中是否内置了 gzip 支持?

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

我知道我可以做到

zcat my_stuff.csv.gz | less
Run Code Online (Sandbox Code Playgroud)

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

enz*_*tib 48

less默认情况下不要这样做,但是默认中有一行~/.bashrc更改了默认行为:

[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
Run Code Online (Sandbox Code Playgroud)

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

less /var/log/dpkg.log*
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • @johanvdw:是的:我说过“默认的`~/.bashrc` 中有一行”。OP 可以修改它自己的`~/.bashrc`。 (2认同)

Jav*_*era 30

Less无法读取 gzipped 文件,您可以在其手册页中查看。有一个脚本,默认情况下安装在 Ubuntu 和大多数发行版中,称为zless,它按照您的描述工作。

所以答案是使用:

zless my_stuff.csv.gz
Run Code Online (Sandbox Code Playgroud)

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

echo $LESSOPEN
||/usr/bin/lesspipe.sh %s
Run Code Online (Sandbox Code Playgroud)

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