压缩与解压

更新时间:

本节为您介绍 Linux 系统中如何压缩和解压文件。

# 概述

常见压缩文件在 Linux 操作系统中的解压方法如下所示。

文件格式 解压工具 快速解压参考
.tar tar tar -xvf filename.tar
.gz gzip gunzip -v filename.gz
.tar.gz tar tar -zxvf filename.tar.gz
.zip zip unzip archive.zip
.7z 7z 7z x archive.7z
.bz2 bzip2 bunzip2 -k archive.bz2
.tar.bz2 tar tar -jxvf filename.tar.bz2

# tar

tar 命令是 Linux 下常用的打包和压缩工具,支持压缩/解压缩 tar、tar.gz、tar.bz2 格式文件。tar 命令使用:

tar [选项] [文件名] [文件列表]
选项(简) 含义
-c 创建一个 tar 包。可以和 -f 参数一起使用,指定生成的 tar 包的文件名。
-x 解压一个 tar 包。可以和 -f 参数一起使用,指定要解压缩的 tar 包的文件名。
-r 将一个或多个文件追加到已存在的 tar 包的末尾。可以和 -f 参数一起使用,指定要追加到的 tar 包的文件名。
-u 仅将新于 tar 包中已有的文件或目录添加到 tar 包中。可以和 -f 参数一起使用,指定要更新的 tar 包的文件名。
-t 列出一个 tar 包中包含的所有文件。可以和 -f 参数一起使用,指定要查询的 tar 包的文件名。
-f 指定要操作的 tar 包的文件名。
-v 在操作的过程中显示详细信息。
-z 在 tar 包中使用 gzip 压缩。
-j 在 tar 包中使用 bzip2 压缩。
-C 指定解压缩到的目录。

压缩示例

#将多个文件或目录压缩为一个 tar 包。file1、file2、dir1 为要压缩的文件和目录,filename.tar 为压缩后的包名。
tar -cvf filename.tar file1 file2 dir1
 
#将目录及其子目录下的所有文件压缩为一个 tar.gz 包。-z 表示使用 gzip 压缩。
tar -czf filename.tar.gz dir1
 
#将目录及其子目录下的所有文件压缩为一个 tar.bz2 包。-j 表示使用 bzip2 压缩。
tar -cjf filename.tar.bz2 dir1

解压示例

#将一个 tar 包解压缩到指定目录下,filename.tar 为要解压的包,/path/to/directory 为解压到的目录。
tar -xvf filename.tar -C /path/to/directory
 
#将一个 tar.gz 包解压缩到指定目录下。-z 表示使用 gzip 解压缩。
tar -zxvf filename.tar.gz -C /path/to/directory
 
#将一个 tar.bz2 包解压缩到指定目录下。-j 表示使用 bzip2 解压缩。
tar -jxvf filename.tar.bz2 -C /path/to/directory

# gzip

gzip 和 gunzip 是在 Linux 中用于压缩和解压缩文件的工具。gzip 使用 DEFLATE 压缩算法,而 gunzip 则用于解压缩经 gzip 压缩过的文件。gzip 命令使用:

gzip [选项] [文件]
选项 含义
-c 标准输出并保留源文件,即指定输出的路径及文件名。
-d 执行解压缩。
-f 强制覆盖输出文件和压缩链接。
-l 查看每个压缩文件的详细信息,包含:压缩文件大小、原文件大小、压缩比、原文件名称。
-r 递归查询指定目录,并压缩/解压其中的所有文件。
-t 测试,检查压缩文件是否完整。
-v 显示压缩/解压缩过程信息。

压缩

#filename 压缩为 filename.gz,并删除原始文件。-v 显示详细压缩信息,包括压缩比和进度。
gzip -v filename

#filename 压缩为 filename.gz,并保留原始文件。
gzip -c filename > filename.gz

解压

#解压缩 filename.gz 并删除该文件。-v 显示详细解压缩信息,包括解压缩比和进度。
gunzip -v filename.gz

#解压 filename.gz 文件,同时保留该压缩文件。  
gunzip -c filename.gz > filename

# zip

zip 和 unzip 是用于在 Linux 系统中创建和解压缩 ZIP 文件的命令行工具。如下为 zip 命令使用说明,您也可通过 man zipman unzip 命令查看它们的详细帮助。

zip [选项] [压缩文件] [文件]
选项 含义
-m 文件压缩后,删除源文件。
-o 将压缩文件设置为和源文件一样的时间。
-q 安静模式,压缩时不显示命令执行过程。
-r 将指定目录下的所有子目录及文件一起处理。
-n <特定字符串> 不压缩特定字符结尾的字符串。
-v 显示详细操作信息。
-z 添加压缩文件注释。
-e 压缩的时候指定加密。
-T 测试压缩文件完整性。
-c 添加一行注释。
-u 更新压缩文件,向压缩文件内添加新文件。
-x <文件名> 压缩时排除指定文件。
-i <文件名> 压缩时只包括指定文件。

压缩

#将多个文件压缩为 archive.zip 包。
zip archive.zip file1 file2 file3

#将某个目录压缩为 archive.zip 包。-r 可以递归地将目录及其内容压缩一起压缩。
zip -r archive.zip dir1

#将文件或目录压缩到 archive.zip 文件,同时保留原始文件。
zip -r - files | cat > archive.zip

解压缩

#解压 archive.zip 到当前目录。
unzip archive.zip

#解压 archive.zip 文件到指定目录。-d 选项,指定解压到的目录。
unzip archive.zip -d /path/to/destination

查看压缩包

#列出 archive.zip 文件的内容列表,包括文件名、压缩比等信息。
unzip -l archive.zip

# 7z

7z 是一个用于创建和解压缩文件归档的命令行工具,支持多种压缩算法。如下为 7z 的常用命令,可通过 man 7z 命令查看 7z 命令的详细帮助。

安装 环境中可能未安装 7z 工具,Ubuntu 系统下的安装方式如下所示:

sudo apt-get update
sudo apt-get install -y p7zip-full

压缩

#将多个文件和目录压缩为 archive.7z。默认使用 LZMA 算法进行压缩。
7z a archive.7z file1 file2 dir1

#将多个文件和目录压缩为 archive.7z。-t 指定使用 zip 算法进行压缩。
7z a -tzip archive.zip file1 file2 dir1

解压缩

#解压 archive.7z 到当前目录。
7z x archive.7z

#解压缩到指定目录。-o 指定解压缩到的目录。
7z x archive.7z -o/path/to/destination

查看压缩包

#列出 7z 文件的内容列表,包括文件名、压缩比等信息。
7z l archive.7z

# bzip2

使用 Burrows-Wheeler 块排序文本压缩算法,将文件进行压缩,压缩比率比一般算法高一些。

bzip2 [选项] [文件]
选项 含义
-c 将压缩与解压缩结果送到标准输出,即指定压缩/解压后输出到的具体路径和文件名。
-d 执行解压缩。
-f 压缩或解压缩时,如果输出文件与现有文件同名,则覆盖现有文件。
-k 压缩或解压缩后,保留原始文件。
-s 降低程序执行时内存的使用量。
-t 测试压缩文件的完整性。
-v 压缩或解压缩时,显示详细信息。
-z

压缩

#压缩单个文件,即将 file1 压缩为 file1.bz2。
bzip2 file1

#压缩多个文件,将分别生成 file1.bz2、file2.bz2、file3.bz2 压缩文件。
bzip2 file1 file2 file3

#压缩单个文件到指定目录
bzip2 -c file1 > /path/to/directory/file1.bz2

解压

#解压 archive.bz2 到当前目录,解压后不保留原压缩文件。
bzip2 -d archive.bz2

#解压到指定目录。-c 指定解压到的目录。
bzip2 -dc archive.bz2 > /path/to/target_directory/archive.txt