如何在不解压缩ZIP归档文件的情况下列出其中的文件?

88

如何在命令行中获取 .zip 文件(不是gzip)的相当于ls的东西?也就是说,如何列出压缩在我的 .zip 文件中的不同文件?请注意,这应该是一个不需要解压缩的操作。

10个回答

147
使用 -l 选项时,请使用 unzip 命令:
unzip -l file.zip

1
原始响应中的链接对我来说返回了HTTP 403,但是手册页面上有相关信息。(运行man unzip访问此处。) - Joe
unzip -l file.zip 只列出第一层级别的文件和文件夹,而不是这些文件夹内部的文件。 - msoutopico
1
那不正确,至少对于我正在使用的版本来说。它确实提供了一个递归列表。 - perreal
@perreal 你所说的递归列表是什么意思?你是指如果一个压缩文件中有其他的压缩文件吗? - Peter Moore
我是指zip文件中的目录中的文件,@PeterMoore。 - perreal
哦,是的,我同意,那绝对适合我。 - Peter Moore

21

less实用程序能够查看 zip 压缩文件。

less 工具已经捆绑在 Unix 中,无需额外安装。输出结果可滚动分页显示,并且不会像其他答案中提到的 unzip -l 命令那样将内容记录到终端。

参考https://superuser.com/a/216675/249975

因此,只需使用less filename.zip命令即可。


5
在Ubuntu 20.04上测试通过且工作良好,但在MacOS 10.15.7上无法运行。 - manuelpgs
实际上,对于Mac OS,需要像本页面其他答案中所示使用unzip -l file.zip - Pierre

17

Perreal的回答是正确的,但我建议安装atool(在您的发行版软件包管理器中查找)。然后,对于任何类型的归档文件,如bzip2,gzip,tar...您只需要记住一个命令:

als archive_name

1
我非常确定它可以与LZMA一起使用。从技术上讲,atool只是一个聪明的Perl脚本,它包装了您系统中现有的程序。如果您安装了unrar,则它将与rar文件一起工作;如果您安装了7zip,则atool将知道7z等等... - Miklos Aubert

15
使用此命令可以在不解压缩的情况下查看压缩文件的内容。
unzip -l file.zip

对于tar文件,我们可以使用
zcat <archived-file>

9
zipinfo -1 filename.zip

它仅返回文件名,例如(响应):
listing.html
my_data.csv
super.txt

6

在Debian/Ubuntu中使用lesspipe,它还可以列出许多其他的归档类型:

     *.arj
     *.tar.bz2
     *.bz
     *.bz2
     *.deb, *.udeb
     *.doc
     *.gif, *.jpeg, *.jpg, *.pcd, *.png, *.tga, *.tiff, *.tif
     *.iso, *.raw, *.bin
     *.lha, *.lzh
     *.pdf
     *.rar, *.r[0-9][0-9]
     *.rpm
     *.tar.gz, *.tgz, *.tar.z, *.tar.dz
     *.gz, *.z, *.dz
     *.tar
     *.jar, *.war, *.xpi, *.zip
     *.zoo

使用方法:

lesspipe file.zip

reference


1
你能简单地解释一下lesspipe是什么吗?并提供一个链接吗? - einpoklum

2
您也可以使用“zmore archive_name”命令。 它会列出存档及其内容。

zmore是一个文件过滤器,用于CRT查看压缩文本。如果您压缩了多个文件,则仅显示第一个文件。(perreal的答案很有效,这就是为什么我建议使用zmore获取有关压缩文件工具的更多信息) - Xavier S.

2
我将加入以下选项,因为我发现这是迄今为止最方便的方法(探索一个大小为2GB的tar文件,其中包含成千上万个文件和目录)。
使用archivemount对我来说是最有用的方法。
操作步骤如下:
mkdir mount-point
archivemount archive.tar.gz mountpoint
cd mount-point

umount mount-point

解释

您需要创建一个空文件夹作为挂载点。最简单的方法是在存档文件所在的文件夹中创建该文件夹,就像上面的示例一样。虽然您可以在任何位置创建它。只需相应更改命令中的mount-point即可。

一旦您进入mount-point文件夹,您将拥有一个普通的Linux文件夹和文件树,可以使用任何用于在Linux中探索、查找、cat、编辑、ls等文件夹和文件的命令进行探索。非常方便。

完成后,请使用umount卸载存档。

请注意,您可能需要先安装archivemount。例如,sudo apt install archivemount

我为什么觉得这很有用

我基本上想要一种简单的方法来调查大型tar文件的内容。对于我来说,仅仅拥有大量文件夹和文件名的文本输出(数万行)并不特别有用。即使找到了通过其他后处理器将该内容管道传输的方法。

您可以使用此方法处理zip文件、tar文件以及使用gzip、bzip或compress压缩的文件。

有关archivemount的完整详细信息,请参见此处

关于它的一个很好的介绍在这里

这句话(来自那篇文章)总结了这个工具的灵活性:

[因为archivemount通过FUSE]通过Linux内核公开其文件系统,您可以使用任何应用程序将文件直接加载和保存到这样的挂载存档中。这使您可以在仍然位于存档文件内的文件上使用您喜欢的文本编辑器、图像查看器或音乐播放器。更进一步,由于archivemount还支持某些存档格式的写访问权限,因此您还可以从存档内部直接编辑文本文件。


0

如果您想浏览单个压缩文件,请尝试使用zless。当zip包含多个文件时,这可能没有那么有用。

根据man页面的描述:

Zless是一种过滤器,允许在软复制终端上逐屏查看压缩或纯文本文件。它相当于将环境变量LESSOPEN设置为'|gzip-cdfq--%s',将环境变量LESSMETACHARS设置为'<new-line>;*?"()<>[|&^`#$%=~',然后运行less命令。不过,足够多的人似乎认为提供可用的zless命令很重要。

其他一些方便的"z"工具包括zcat和zmore(在先前的答案中提到),还有zdiff和zgrep。

关于回答最初的问题,如何查看zip的内容,我更喜欢使用zipinfo,然后是unzip -l。


-1

如果在 Linux 主机上安装了 GZIP,想要查看压缩文件的内容而不需要解压缩它,可以使用 "zcat" 命令。

zcat 压缩文件名 | more


1
这不是我的问题的答案;它是关于zip,而不是gzip;也不是关于cat'ing内容,而是列出哪些文件在zip归档中。 - einpoklum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接