在FreeBSD上用'less'显示tar文件内容

不断在Linux和FreeBSD之间切换,我不断碰到这个问题。 当我做:

less something.tgz 

Linux系统(嗯… Ubuntu是精确的)给我看一个文件列表,这是我一般想要的,而FreeBSD显示一个二进制内容。 这种行为(显示文件内容)是如何在Linux上完成的,是否可以在FreeBSD系统上复制它?

看一下Ubuntu盒子上的lesspipe (或lessopen )的man页面。

在Debian / Ubuntu版本中,你所要做的就是添加

 eval "$(lesspipe)" 

到你的.bashrc

在FreeBSD上,你可以在一个名为lesspipe的单独的port里findlesspipe.sh脚本,它使用了sourceforge的一个版本(虽然上面没有这个方便的设置,但是手册页less了更多的信息)。

下面是我在freshmeat上find的一个不同版本的脚本: lesspipe,一个less用的浏览器插件

我会成为这个胡言乱语的老人,他喊道:“嗨,你的孩子,放下我的草坪吧!” 但…

你做得不对

这两个常见的寻呼机程序中,less一些是用于在一系列pipe道命令的末尾运行的。 这些程序不是用来读取任何随机sorting的文件,如cpio归档文件或tar归档文件,或者是经过编码的gzipped tarred desencryption的bzip2ed文件。

学习unix的做事方式,你就会开始理解一大堆其他的事情。 这样你就可以学习stdin和stdout和stderr。

gzip -d <文件| tar -tvf – | 减

你以后会感谢我的

你可能会看到zless somefile.tgz有用的东西,但我认为你真正想要做的是这样的:

 tar ztvf somefile.tgz |less 

这将在所有系统上工作。 请注意,t只是告诉你什么是不同的x提取文件。

这是使用'lessopen'预处理器完成的:

 michael@challenger:~> echo $LESSOPEN lessopen.sh %s michael@challenger:~> which lessopen.sh /usr/bin/lessopen.sh michael@challenger:~> less logs.zip Archive: ./logs.zip Length Method Size Ratio Date Time CRC-32 Name -------- ------ ------- ----- ---- ---- ------ ---- 17484 Defl:N 2269 87% 03-30-09 22:59 03bf67d6 20090330/Logs-20090330.CSV ... 

除去环境variables,你会发现在基本系统上的行为不如以前那样:

 michael@challenger:~> unset LESSOPEN michael@challenger:~> less logs.zip "logs.zip" may be a binary file. See it anyway? 

检查你的less(1)手册页,看它是否支持LESSOPEN。

我从来没有在.tgz文件中看到这个工作,只有.gz文本文件,但也许它。 无论如何,在很多Linux发行版上,检测到文件是否被压缩,并在显示的时候解压缩stream。 我不能说FreeBSD,但至less在OpenBSD上,如果看一个gzip文本文件,你需要使用zless 。 我想它也包含在FreeBSD中,或者至less可以从ports树中获得。