滴水穿石非一日之功
想必大家都对 ZIP 文件并不陌生。它因其广泛的兼容性和易用性,成为 Windows 和 macOS 默认的压缩格式。压缩与解压的操作,大家都再熟悉不过,在 Linux 系统中,当然也提供了多种压缩工具。正因如此,不同格式的选择和使用常常让人感到困惑。下面让我们来一起梳理一下。
gzip
(.gz
):高效且常用,常与 tar
联合使用。bzip2
(.bz2
):压缩率较高,但速度较慢。zip
(.zip
):跨平台常用格式,支持直接包含多个文件。7z
(.7z
):由 7-Zip 提供,支持极高压缩率。xz
(.xz
):压缩率高,适合对大小敏感的应用。rar
(.rar
):需要专用工具解压,常见于Windows环境。tar
(.tar
):用于打包多个文件,但本身不压缩。
文件类型 | 压缩 | 解压 | 默认压缩级 | 默认压缩是否保留源文件 |
---|---|---|---|---|
.gz | gzip file.txt | gzip -d file.txt.gzgunzip file.txt.gz | 6 | 否 |
.bz2 | bzip2 file.txt | bzip2 -d file.txt.bz2bunzip2 file.txt.bz2 | 9 | 否 |
.xz | xz file.txt | xz -d file.txt.xzunxz file.txt.xz | 6 | 否 |
.zip | zip file.zip file.txt | unzip file.zip | 6 | 是 |
.rar | rar a file.rar file.txt | unrar x file.rar | 3 | 是 |
.7z | 7z a file.7z file.txt | 7z x archive.7z | 5 | 是 |
.tar.gz | tar -czf archive.tar.gz file1 file2 | tar -xzf archive.tar.gz | / | / |
.tar.bz | tar -cjf archive.tar.bz2 file1 file2 | tar -xjf archive.tar.bz2 | / | / |
.tar.xz | tar -cJf archive.tar.xz file1 file2 | tar -xJf archive.tar.xz | / | / |
.gz
文件是使用 GNU Zip (gzip) 工具进行压缩的文件格式,通常用于压缩单个文件或文件流。.gz
格式是广泛使用的压缩格式。
gzip压缩,压缩完成后会默认删除源文件
##将 file.txt 压缩成 file.txt.gz
gzip file.txt
压缩且保留源文件
gzip -k file.txt
gzip -c file.txt > file.txt.gz
同时压缩多个文件
可以分别列出,也可以使用通配符。
# 压缩后会分别生成 file1.txt.gz、file2.txt.gz 和 file3.txt.gz
gzip file1.txt file2.txt file3.txt
gzip file*.txt
指定压缩级别
gzip 提供了压缩级别的选择,范围从 1
到 9
,其中 1
是最快的压缩速度,但压缩比最低,9
是最慢的压缩速度,但压缩比最高。默认情况下,gzip
使用压缩级别 6
。
##使用最大压缩比
gzip -9 file.txt
##使用最快压缩速度
gzip -1 file.txt
解压 .gz
文件可以使用 gunzip
命令或 gzip -d
命令。
gzip解压,默认会删除源文件
gzip -d file.txt.gz
gunzip file.txt.gz
解压且保留源文件
gzip -dk file.txt.gz
gunzip -k file.txt.gz
同时解压多个gz文件
gzip -d file1.gz file2.gz file3.gz
gunzip file1.gz file2.gz file3.gz
解压到指定目录
本质是重定向了输出。
gzip -dc GRCh38.p14.genome.fa.gz > /path/to/destination/GRCh38.p14.genome.fa
gunzip -c file.txt.gz > /path/to/destination/file.txt
##解压同时重命名
gunzip -c file.txt.gz > /path/to/destination/new_filename.txt
查看gz文件的详细信息
包括原文件大小、压缩后大小、压缩比等
gzip -l GRCh38.p14.genome.fa.gz
检查gz文件是否完整
没有报错输出即代表文件完整
gzip -t GRCh38.p14.genome.fa.gz
.bz2
文件是使用 bzip2 工具进行压缩的文件格式,因其默认提供比 gzip
更高的压缩比,广泛用于压缩大文件,尽管压缩和解压速度相对较慢。
bzip2压缩
压缩完成后也是默认删除源文件
##file.txt 将被压缩成 file.txt.bz2
bzip2 file.txt
压缩且保留源文件
bzip2 -k file.txt
指定压缩级别压缩
bzip2
同样允许指定压缩级别,范围从 1
到 9
,其中 1
是最快的压缩速度,但压缩比最低,9
是最慢的压缩速度,但压缩比最高。默认压缩级别是 9
(最高压缩比)。
bzip2 -1 file.txt
bzip2 -9 file.txt
同时压缩多个文件
bzip2 file1.txt file2.txt file3.txt
bzip2 file*.txt
类似 .gz
文件,解压 .bz2
文件可以使用 bunzip2
命令或者 bzip2 -d
命令。
解压
默认删除源文件
#file.txt.bz2 会被解压为 file.txt
bunzip2 file.txt.bz2
##或者
bzip2 -d file.txt.bz2
解压时保留源文件
bunzip2 -k file.txt.bz2
##或者
bzip2 -dk file.txt.bz2
同时解压多个文件
bunzip2 file1.bz2 file2.bz2 file3.bz2
bzip2 -d file1.bz2 file2.bz2 file3.bz2
bunzip file*.bz2
bzip2 -d file*.bz2
解压到指定目录
bunzip2 -c file.txt.bz2 > /path/to/destination/file.txt
bzip2 -dc file.txt.bz2 > /path/to/destination/file.txt
##解压并重命名
bunzip2 -c file.txt.bz2 > /path/to/destination/new_filename.txt
bzip2 -dc file.txt.bz2 > /path/to/destination/new_filename.txt
查看压缩文件详细信息
bzip2 -l file.txt.bz2
检查压缩文件完整性
bzip2 -t file.txt.bz2
.xz
文件格式是基于 LZMA2算法(Lempel-Ziv-Markov chain algorithm)的压缩文件格式,提供了非常高的压缩比,通常比 .gz
和 .bz2
格式更高效,尤其适用于压缩大文件。它在 Linux 和类 Unix 系统中非常流行,并且常用于软件包的分发和备份。
压缩
默认删除源文件
## 压缩 file.txt,并生成一个名为 file.txt.xz 的压缩文件
xz file.txt
压缩并保留源文件
##将 file.txt 压缩为 file.txt.xz,并保留原文件 file.txt
xz -k file.txt
指定压缩级别
xz
默认的压缩级别是 6
,且支持多个压缩级别,压缩级别的范围是从 1
到 9
,其中 1
是最快的压缩,但压缩比最低,9
是最慢的压缩,但压缩比最高。
##使用最大压缩比
xz -9 file.txt
##使用最快压缩速度
xz -1 file.txt
同时压缩多个文件
xz file1.txt file2.txt file3.txt
##使用通配符
xz file*
xz -d file.txt.xz
##或者
unxz file.txt.xz
解压到指定目录
xz -dc file.txt.xz > /path/to/destination/file.txt
unxz -c file.txt.xz > /path/to/destination/file.txt
查看.xz
文件的内容
##会显示压缩文件的大小、压缩率等信息,但不会解压文件
xz -l file.txt.xz
gzip、bzip2和xz 都不能压缩整个目录,如果要用压缩整个目录为 .gz
、.bz
、.xz
格式,这个时候就需要和 tar 命令联用。
tar
(Tape Archive)是 Unix 和类 Unix 系统中的一个常用命令,用于创建、管理和解压归档文件(通常称为 tarball)。tar
不仅能将多个文件和目录归档为一个文件(.tar
格式),还支持多种压缩算法,如 .gz
、.bz2
、.xz
等,生成 .tar.gz
、.tar.bz2
、.tar.xz
等压缩文件。
创建归档文件
使用 -c
选项创建一个归档文件,-f
选项指定归档文件的名称。
## 把 file1、file2 和 directory/ 压缩为 archive.tar
tar -cf archive.tar file1 file2 directory/
查看归档内容而不解压
##列出 archive.tar 中包含的所有文件和目录
tar -tf archive.tar
解开归档文件
##解压 archive.tar 中的所有文件到当前目录
tar -xf archive.tar
##解压归档文件到指定目录
tar -xf archive.tar -C /path/to/destination/
归档和压缩联用
##归档,并调用gzip压缩打包后的文件
tar -czf archive.tar.gz file1 file2
##归档,并调用bzip2压缩打包后的文件
tar -cjf archive.tar.bz2 file1 file2
##归档,并使用xz压缩打包后的文件
tar -cJf archive.tar.xz file1 file2
解压使用压缩格式的归档文件
##解压 .tar.gz 或 .tgz文件:
tar -xzf archive.tar.gz
##解压 .tar.bz2 文件
tar -xjf archive.tar.bz2
##解压 .tar.xz 文件
tar -xJf archive.tar.xz
##自动识别后缀解压
tar -xf archive.tar.gz
tar -xf archive.tar.bz2
tar -xf archive.tar.xz
注:如果记不住解压gz、bz2、xz压缩文件的具体参数,只需要记住tar -xf
即可,会自带识别文件后缀,使用对应的工具来解压
在 Linux 系统中, .zip
文件格式并不是本地支持的(如 .gz
或 .bz2
),但是可以通过安装 zip
和 unzip
工具来处理 .zip
文件。
压缩文件
zip默认会保留源文件
##将 file.txt 压缩成 file.zip 文件
zip file.zip file.txt
压缩多个文件
zip archive.zip file1.txt file2.txt file3.txt
##使用通配符
zip archive.zip *.txt
压缩整个目录
## 将 directory/` 目录及其所有子文件和子目录压缩成 archive.zip 文件
zip -r archive.zip directory/
指定压缩级别压缩
zip
命令也可以自定义设置压缩级别,从 0
到 9
,其中 0
为不压缩,9
为最大压缩。默认的压缩级别是 6
。
zip -0 archive.zip file.txt
zip -9 archive.zip file.txt
更新压缩文件
添加文件到已存在的 .zip
文件/更新 .zip
文件中的文件
-u
参数,可以向已经存在的 .zip
文件添加新的文件。
#将 `file4.txt` 添加到已存在的 `archive.zip` 文件中
zip -u archive.zip file4.txt
#将更新后的 `file1.txt` 添加到 `archive.zip` 文件中(如果文件内容有变化)。
zip -u archive.zip file1.txt
解压 .zip
## 解压 file.zip 到当前目录,并且会自动提取文件及目录结构
unzip file.zip
解压到指定目录
##将 file.zip 解压到 /path/to/destination/ 目录,且保持原有的目录结构
unzip file.zip -d /path/to/destination/
列出 .zip 文件内容
##列出 file.zip 文件中的所有内容(文件名、大小等信息)
unzip -l file.zip
仅解压指定文件
#仅解压read2.txt 和 readme6.txt 到 tmp3目录下
unzip tmp.zip tmp/read2.txt readme6.txt -d ./tmp3/
.rar
文件是由 RAR 压缩工具生成的文件格式,通常提供较高的压缩比,尤其适用于大文件和多文件集合。RAR 文件格式在 Linux 中通常也不是内建支持的,但可以通过安装unrar
或 rar
来处理 .rar
文件。安装可以系统管理员安装也可以自己安装。
##管理员安装
sudo apt install unrar
##普通用户安装
mamba install unrar
压缩
默认也是保留源文件
rar a file.rar file.txt
压缩多个文件
rar a archive.rar file1.txt file2.txt file3.txt
##使用通配符
rar a readme.rar readme*.txt
压缩整个目录
#将 `directory/` 目录及其所有文件和子目录压缩成 `archive.rar` 文件
rar a -r archive.rar directory/
指定压缩级别
rar
命令默认的压缩级别是 3
,同时也支持多种压缩级别,从 0
到 5
,其中 0
是最快的压缩,但压缩比最低,5
是最慢的压缩,但压缩比最高。
rar a -m5 archive.rar file.txt
解压
##解压文件到当前工作目录
unrar x file.rar
unrar x paper19_cancerCell.rar
解压到指定目录
unrar x file.rar -d /path/to/destination/
查看 .rar
文件内容
unrar l file.rar
.7z
文件是 7-Zip 格式的压缩文件,通常提供比 .zip
和 .rar
更高的压缩比。7z
格式支持多种压缩算法、加密、分卷压缩等高级功能,广泛用于高效的文件压缩和存储。同样,7z格式也不是内建支持的,需要安装 7z 或 p7zip 工具
##管理员安装
sudo apt install p7zip-full
##普通用户安装
mamba install p7zip
压缩
7z压缩默认会保留源文件
# 将 `file.txt` 压缩为 `file.7z`
7z a file.7z file.txt
压缩多个文件
7z a archive.7z file1.txt file2.txt file3.txt
##使用通配符
7z a readme2.7z file*.txt
image.png
压缩整个目录
7z a -r archive.7z directory/
指定压缩级别
默认的压缩级别是 5
,同样提供了多种压缩级别,范围从 0
到 9
,其中 0
是最快的压缩速度,但压缩比最低,9
是最慢的压缩速度,但压缩比最高。
7z a -mx=9 archive.7z file.txt
解压,默认解压到当前目录,并保留文件的目录结构。
7z x archive.7z
解压到指定目录
7z x archive.7z -o/path/to/destination/
注意, -o
参数和路径之间没有空格
查看.7z文件内容
## 列出 .7z 文件中的所有内容,包括文件名、大小等信息
7z l archive.7z