如何在Linux中对文件和目录进行压缩

评论 0 浏览 0 2019-03-18

Zip是最广泛使用的压缩包文件格式,支持无损数据压缩。

Zip文件是一个包含一个或多个压缩文件或目录的数据容器。压缩(zip)文件占用的磁盘空间较少,与未压缩的文件相比,可以更快地从一台机器传输到另一台机器。在Windows、macOS和Linux中,可以使用所有操作系统可用的工具轻松提取Zip文件。

本教程将告诉你如何在Linux中使用zip命令来压缩文件和目录。

zip命令

zip是一个命令行工具,可以帮助你创建Zip压缩包。

zip命令的语法形式如下:

zip OPTIONS ARCHIVE_NAME FILES

要在一个特定的目录中创建Zip压缩包,用户需要对该目录有写的权限。

Zip文件不支持Linux风格的所有权信息。被提取的文件由运行该命令的用户拥有。要保留文件的所有权和权限,请使用tar命令。

大多数Linux发行版都没有默认安装zip工具,但你可以使用你的发行版软件包管理器很容易地安装它。

在Ubuntu和Debian上安装zip的方法

sudo apt install zip

在CentOS和Fedora上安装zip的方法

sudo yum install zip

如何对文件和目录进行压缩

要压缩一个或多个文件,指定你要添加到存档中的文件,用空格隔开,如下图所示。

zip archivename.zip filename1 filename2 filename3

输出

adding: filename1 (deflated 63%)
adding: filename2 (stored 0%)
adding: filename3 (deflated 38%)

默认情况下,zip命令会打印出添加到存档中的文件名称和压缩方法。我们将在本指南的后面解释压缩方法和级别。

如果压缩包名称不是以.zip结尾,扩展名会自动添加,除非压缩包名称包含一个点。zip archivename.zip filename将创建一个与zip archivename filename同名的压缩包。

要想抑制zip命令的输出,请使用-q选项。

zip -q archivename.zip filename1 filename2 filename3

通常,你会创建一个包括子目录内容在内的目录的压缩包。-r选项允许你递归地遍历整个目录结构。

zip -r archivename.zip directory_name

你也可以在同一个压缩包中添加多个文件和目录。

zip -r archivename.zip directory_name1 directory_name2 file1 file1

压缩的方法和级别

Zip的默认压缩方法是deflate。如果zip工具确定一个文件不能被压缩,它只是将文件存储在压缩包中,而不使用store方法进行压缩。在大多数Linux发行版中,zip工具也支持bzip2的压缩方法。

要指定一种压缩方法,请使用-Z选项。

zip -r -Z bzip2 archivename.zip directory_name

输出

...
adding: sub_dir/ (stored 0%)
adding: sub_dir/file1 (bzipped 52%)
adding: sub_dir/file2 (bzipped 79%)

zip命令允许你用0到9的破折号为前缀指定一个压缩级别。默认的压缩级别是-6。当使用-0时,所有的文件都将不经压缩而被存储。-9将迫使zip命令对所有文件使用最佳压缩方式。

例如,如果要使用压缩级别-9,你可以输入这样的内容。

zip -9 -r archivename.zip directory_name

压缩级别越高,压缩过程的CPU密集度就越高,需要更多的时间来完成。

创建一个受密码保护的ZIP文件

如果你有敏感的信息需要储存在压缩包,你可以使用-e选项来加密它。

zip -e  archivename.zip directory_name

命令会提示输入并验证归档密码。

输出

Enter password:
Verify password:

创建拆分的压缩文件

想象一下,你想把Zip压缩包存储在一个文件托管服务上,该服务的文件上传大小限制为1GB,而你的Zip压缩包是5GB。

你可以使用-s选项和一个指定的大小来创建一个新的分割的Zip文件。乘数可以是k(千字节)、m(兆字节)、g(千兆字节)或t(太字节)。

zip -s 1g -r archivename.zip directory_name

上面的命令会在一个压缩包集达到指定的大小限制后继续创建新的压缩包。

输出

archivename.zip
archivename.z01
archivename.z02
archivename.z03
archivename.z04

zip命令的例子

创建一个名为archivename.zip的Zip压缩包,其中包含当前目录中的所有文件。

zip archivename *

与上述相同,包括隐藏的文件(以点开头的文件)。

zip archivename .* *

创建一个名为archivename.zip的Zip压缩包,包含当前目录下的所有MP3文件,而不对文件进行压缩处理。

zip -0 archivename *.mp3

总结

在Linux中,你可以用zip命令来创建Zip压缩包。

要在Linux系统上提取ZIP压缩文件,可以使用unzip命令

如果你想了解更多关于zip命令的信息,请访问Zip Man页面。

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-03-11
0 个评论
标签