压缩

压缩

这里我在我的机器上使用 debian/testing 发行版,但是有一些有趣的事情。

# less file.zip
"./file.zip" may be a binary file.  See it anyway?

为了能够使用 less 命令在我的计算机上打开 zip 文件,我是否需要在我的计算机上安装一些额外的软件包?

答案1

当您对文件调用 less 时,此lesspipe工具可以透明地将文件转换为文本。这包括解压缩 .gz 文件和列出 .zip 文件的内容。Debian 包含lesspipeless软件包中但不会自动配置它。

将以下内容添加到你的 shell 的登录脚本中(例如~/.bash_profile):

eval "$(lesspipe)"

这应该添加两个环境变量,LESSOPENLESSCLOSE。完成此操作后,less在 zip 文件上运行应该会显示 zip 文件中的文件列表。

答案2

总结:unzip -p file.zip | less


一些背景知识

压缩

我认为 ZIP 文件格式首先出现在 MSDOS 上,然后出现在 MS Windows 上。它主要是一种将许多文件聚集到一个存档中并压缩组合数据的方法。换句话说,它会创建一个多文件压缩存档。您不能假设 ZIP 文件包含单个文件并假设该文件是文本文件。

我记得 zip 实用程序使用的压缩算法多年来一直在变化,尽管后来的工具可能可以处理早期的压缩算法。我认为创建 ZIP 文件的最常用工具最初是 PKWare 的 Phil Katz 创建的 PKZIP 工具。后来 MS WIndows 获得了本机创建 ZIP 文件的能力。

Unix 和 Linux

在类 Unix 系统中,传统的等效方法是先使用 tar 等工具将多个文件聚集在一起以创建一个something.tar文件,然后将compress其分开以创建一个something.tar.Z文件。后来,Gnutar从 Gnu-Zip ( ) 获得了压缩功能,并且可以在单个操作中gzip创建一个something.tar.gz或。something.tgz

因此,文件扩展名为 的文件.ZIP很可能源自 Windows 而不是 Linux。

如果您的 ZIP 文件确实包含单个文本文件,则一般解决方案是将解压缩操作的输出通过管道传输到less。这取决于是否有一个 unzip 命令可以读取您的特定风格的 zip 压缩并具有写入 STDOUT 的选项。

通常安装的工具用于查看使用某些“zip”压缩算法压缩的文本文件,包括zcatbzless。这些工具的手册页说

GZIP(1)                                                  General Commands Manual    
NAME
       gzip, gunzip, zcat - compress or expand files

SYNOPSIS
       gzip [ -acdfhklLnNrtvV19 ] [--rsyncable] [-S suffix] [ name ...  ]
       gunzip [ -acfhklLnNrtvV ] [-S suffix] [ name ...  ]
       zcat [ -fhLV ] [ name ...  ]

DESCRIPTION
       Gzip  reduces  the  size of the named files using Lempel-Ziv coding (LZ77).

BZMORE(1)                                                General Commands Manual 

NAME
       bzmore, bzless - file perusal filter for crt viewing of bzip2 compressed text

SYNOPSIS
       bzmore [ name ...  ]
       bzless [ name ...  ]

但这取决于所选的压缩实用程序是否了解您的 zip 文件所使用的特定压缩算法。

PKZIP 兼容的解压缩

您很可能需要一个unzip与 DOS/Windows ZIP 格式兼容的工具。在某些 Linux 系统上,您可能需要先使用适合您的发行版的包管理器安装它。例如sudo apt install zip

$ ls -l eg*
-rw-rw-rw- 1 rgb rgb 182 Aug 30 19:10 eg.zip

$ unzip -l eg.zip
Archive:  eg.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       20  2020-08-30 18:50   eg.txt
---------                     -------
       20                     1 file

$ unzip -p eg.zip
hello world
The end

$ unzip -p eg.zip | less
hello world
The end

相关内容