如何在 Linux 中列出 zip 压缩文件的内容

LinuxBeginner
立即练习

介绍

本教程将指导你如何在你的 Linux 系统上列出 zip 压缩文件的内容。无论你是开发者、系统管理员,还是仅仅是一个好奇的 Linux 用户,了解如何从命令行处理 zip 文件都是一项非常有价值的技能。我们将介绍 zip 压缩文件的基础知识,演示列出其内容的步骤,并提供实际用例和示例,以帮助你更有效地管理你的文件。

安装 ZIP 工具

要在 Linux 中处理 zip 压缩文件,我们需要安装适当的工具。我们需要的主要工具是 zipunzip 命令。

让我们检查一下这些工具是否已经安装在你的系统上。打开终端并运行以下命令:

which zip
which unzip

如果这些命令返回诸如 /usr/bin/zip/usr/bin/unzip 这样的路径,则表示这些工具已经安装。如果你没有看到任何输出,我们需要安装它们。

在 Ubuntu 上,我们可以使用 apt 包管理器安装 zip 工具:

sudo apt update
sudo apt install -y zip unzip

让我们验证安装:

zip --version
unzip -v | head -n 1

输出应显示已安装的 zip 工具的版本,类似于这样:

Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

现在我们已经安装了必要的工具,我们准备好创建和处理 zip 压缩文件了。

创建示例 Zip 压缩文件

在我们学习如何列出 zip 压缩文件的内容之前,让我们创建一个示例 zip 文件来使用。这将为我们提供一个在本教程中使用的实际例子。

首先,让我们创建一个目录来存储我们的示例文件。在你的终端中运行以下命令:

mkdir -p ~/project/zip_demo
cd ~/project/zip_demo

现在,让我们创建几个具有不同内容的示例文件:

echo "This is a text file for our zip demo." > sample_text.txt
echo "Another text file with different content." > another_text.txt
mkdir -p documents
echo "This file is inside a subdirectory." > documents/nested_file.txt

让我们验证我们的文件是否已正确创建:

ls -la
ls -la documents

你应该看到类似于以下的输出:

total 20
drwxrwxr-x 3 labex labex 4096 Jul 15 10:00 .
drwxr-xr-x 3 labex labex 4096 Jul 15 10:00 ..
-rw-rw-r-- 1 labex labex   39 Jul 15 10:00 another_text.txt
drwxrwxr-x 2 labex labex 4096 Jul 15 10:00 documents
-rw-rw-r-- 1 labex labex   35 Jul 15 10:00 sample_text.txt

total 12
drwxrwxr-x 2 labex labex 4096 Jul 15 10:00 .
drwxrwxr-x 3 labex labex 4096 Jul 15 10:00 ..
-rw-rw-r-- 1 labex labex   36 Jul 15 10:00 nested_file.txt

现在让我们创建一个包含这些文件的 zip 压缩文件:

zip -r sample_archive.zip sample_text.txt another_text.txt documents/

-r 选项告诉 zip 命令以递归方式包含所有文件和子目录。

你应该看到类似于以下的输出:

  adding: sample_text.txt (stored 35 bytes)
  adding: another_text.txt (stored 39 bytes)
  adding: documents/ (stored 0 bytes)
  adding: documents/nested_file.txt (stored 36 bytes)

现在我们已经创建了一个名为 sample_archive.zip 的 zip 压缩文件,其中包含我们的示例文件和目录。在下一步中,我们将学习如何列出此压缩文件的内容。

列出 Zip 内容的基本方法

现在我们已经创建了一个示例 zip 压缩文件,让我们学习如何列出它的内容。为此目的的主要命令是带有各种选项的 unzip

使用 -l 选项 (列表)

列出 zip 压缩文件内容的最常见方法是使用带有 -l 选项的 unzip 命令。此选项显示一个表格,其中显示了压缩文件中每个文件的基本信息。

让我们导航到我们的 zip 演示目录并列出我们的示例压缩文件的内容:

cd ~/project/zip_demo
unzip -l sample_archive.zip

你应该看到类似于以下的输出:

Archive:  sample_archive.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       35  2023-07-15 10:00   sample_text.txt
       39  2023-07-15 10:00   another_text.txt
        0  2023-07-15 10:00   documents/
       36  2023-07-15 10:00   documents/nested_file.txt
---------                     -------
      110                     4 files

输出显示:

  • 每个文件的大小(以字节为单位)
  • 每个文件上次修改的日期和时间
  • 每个文件或目录的名称
  • 一个摘要,显示总大小和文件数

使用 -Z 选项 (ZipInfo)

另一个选项是使用 -Z 选项,它提供更简洁的列表:

unzip -Z sample_archive.zip

你应该看到类似于以下的输出:

Archive:  sample_archive.zip
Zip file size: 676 bytes, number of entries: 4
-rw-rw-r--  3.0 unx       35 tx defN 23-Jul-15 10:00 sample_text.txt
-rw-rw-r--  3.0 unx       39 tx defN 23-Jul-15 10:00 another_text.txt
drwxrwxr-x  3.0 unx        0 bx stor 23-Jul-15 10:00 documents/
-rw-rw-r--  3.0 unx       36 tx defN 23-Jul-15 10:00 documents/nested_file.txt
4 files, 110 bytes uncompressed, 110 bytes compressed:  0.0%

此格式以更紧凑的形式显示文件权限、压缩信息和其他详细信息。

在下一步中,我们将探索更多用于列出 zip 内容的高级选项,并了解如何解释结果。

查看 Zip 内容的高级选项

现在让我们探索一些用于列出 zip 压缩文件内容的高级选项,这些选项提供有关压缩文件中文件的更详细信息。

使用 -v 选项 (Verbose,详细)

-v 选项提供有关压缩文件中每个文件的更详细信息,包括压缩方法、压缩率和 CRC(循环冗余校验)值:

cd ~/project/zip_demo
unzip -v sample_archive.zip

你应该看到类似于以下的输出:

Archive:  sample_archive.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
      35  Stored       35   0% 2023-07-15 10:00 a1b2c3d4  sample_text.txt
      39  Stored       39   0% 2023-07-15 10:00 e5f6g7h8  another_text.txt
       0  Stored        0   0% 2023-07-15 10:00 00000000  documents/
      36  Stored       36   0% 2023-07-15 10:00 i9j0k1l2  documents/nested_file.txt
--------          -------  ---                            -------
     110             110   0%                            4 files

此输出提供以下附加信息:

  • Method:使用的压缩方法(在本例中,“Stored”表示未压缩)
  • Size:文件的压缩大小
  • Cmpr:压缩率(以百分比表示)
  • CRC-32:用于验证文件完整性的校验和值

使用 Grep 过滤输出

有时你可能想要检查特定文件是否存在于大型 zip 压缩文件中。你可以将 unzip -l 命令与 grep 结合使用来搜索特定文件:

unzip -l sample_archive.zip | grep "nested_file"

此命令将仅显示名称中包含文本“nested_file”的条目:

       36  2023-07-15 10:00   documents/nested_file.txt

统计 Zip 压缩文件中的文件数

要统计 zip 压缩文件中的文件数,你可以使用以下命令:

unzip -l sample_archive.zip | grep -v "Archive:" | grep -v "Length" | grep -v "-------" | grep -v "^$" | wc -l

此命令过滤掉页眉和页脚行,并计算剩余的行,这些行对应于压缩文件中的文件和目录。

输出应为:

4

现在你已经知道如何使用高级选项来获取有关 zip 压缩文件内容的更详细信息、搜索特定文件以及统计压缩文件中的文件数。

实际用例和示例

现在我们已经学习了如何列出 zip 压缩文件的内容,让我们探索一些实际场景,在这些场景中,这些技能可能很有用。我们将使用你可能在日常 Linux 使用中遇到的更实际的示例。

创建备份压缩文件

创建备份是 zip 压缩文件的常见用例。让我们创建配置文件的备份:

cd ~/project/zip_demo
mkdir -p config
echo "server_name=example.com" > config/server.conf
echo "user=admin" > config/user.conf
echo "port=8080" > config/port.conf

## Create a dated backup archive
zip -r backup_$(date +%Y%m%d).zip config/

该命令创建一个备份文件,其日期格式为 backup_YYYYMMDD.zip

让我们验证备份的内容:

unzip -l backup_*.zip

你应该看到列出我们刚刚备份的所有配置文件的输出。

比较压缩文件内容

有时你需要比较两个 zip 压缩文件的内容,以查看发生了哪些更改。让我们创建一个包含一些更改的第二个备份:

## Modify a file
echo "port=9090" > config/port.conf
## Add a new file
echo "debug=true" > config/debug.conf
## Create a new backup
zip -r backup_new.zip config/

现在让我们比较两个备份文件的内容:

## List files in the first backup
echo "Original backup:"
unzip -l backup_*.zip | grep -v "Archive:" | grep -v "Length" | grep -v -e "-------"

## List files in the new backup
echo -e "\nNew backup:"
unzip -l backup_new.zip | grep -v "Archive:" | grep -v "Length" | grep -v -e "-------"

你将注意到,新的备份包括额外的 debug.conf 文件,并且由于我们的修改,port.conf 文件可能具有不同的大小。

提取特定文件

你可以使用从列出 zip 内容获得的信息来仅提取特定文件:

## Create a directory for extraction
mkdir -p extracted

## List the contents first
unzip -l backup_new.zip

## Extract only the debug.conf file
unzip backup_new.zip "config/debug.conf" -d extracted/

让我们验证是否仅提取了请求的文件:

ls -la extracted/config/

你应该只在提取的目录中看到 debug.conf 文件。

通过掌握这些实际示例,你现在拥有在各种实际场景中有效管理 zip 压缩文件的技能。从创建备份到比较压缩文件内容和选择性地提取文件,这些技术将帮助你在 Linux 中更有效地管理文件。

总结

在本教程中,你学习了如何在 Linux 中使用 zip 压缩文件,重点是列出它们的内容。以下是我们所涵盖内容的概要:

  1. 在你的 Linux 系统上安装所需的 zip 实用程序
  2. 创建示例 zip 压缩文件以供使用
  3. 使用诸如 unzip -l 之类的基本命令来列出压缩文件内容
  4. 探索诸如 unzip -v 之类的高级选项以获取详细信息
  5. 在实际场景中应用这些技能,例如创建备份、比较压缩文件和提取特定文件

这些技能对于文件管理、故障排除、备份以及 Linux 中的各种其他任务都很有价值。现在,你可以自信地检查 zip 压缩文件而无需提取它们,这可以在处理大型压缩文件时节省时间和磁盘空间。

一些需要记住的关键命令:

  • unzip -l archive.zip:压缩文件内容的基本列表
  • unzip -v archive.zip:带有压缩详细信息的详细列表
  • unzip -Z archive.zip:简洁的列表格式
  • unzip -l archive.zip | grep "filename":搜索特定文件

有了这些命令,你就可以在 Linux 环境中高效地管理 zip 压缩文件。