压缩与解压缩

#linux #运维 #工具

总结
  • tar 是打包工具,本身不压缩;配合 -z(gzip)或 -j(bzip2)才有压缩效果
  • 日常用 .tar.gz(速度快),对压缩率有要求用 .tar.bz2(压缩率高但慢)
  • 解压万能公式:tar -xzvf xxx.tar.gz -C 目标目录
  • gzip 只能压缩单个文件,不能直接压缩目录;zip 可以直接压缩目录

1. tar

tar 本身只做打包(把多个文件合成一个),加上 -z-j 参数才会压缩。

1.1 常用参数

参数 说明
-c 创建归档(打包)
-x 解包
-t 查看归档内容,不解压
-f 指定文件名,必须紧跟文件名
-v 显示处理的文件列表
-z 使用 gzip 压缩/解压(.tar.gz
-j 使用 bzip2 压缩/解压(.tar.bz2),压缩率更高但更慢
-J 使用 xz 压缩/解压(.tar.xz),压缩率最高
-C 解压到指定目录

1.2 常用操作

# 打包并用 gzip 压缩(最常用)
tar -czvf archive.tar.gz file1 file2 dir/

# 打包并用 bzip2 压缩(压缩率更高)
tar -cjvf archive.tar.bz2 dir/

# 解压 .tar.gz 到当前目录
tar -xzvf archive.tar.gz

# 解压到指定目录
tar -xzvf archive.tar.gz -C /opt/myapp/

# 查看压缩包内容(不解压)
tar -tzvf archive.tar.gz

# 只解压其中某个文件
tar -xzvf archive.tar.gz path/to/specific-file

# 向已有 tar 包追加文件(不支持压缩格式,只能对 .tar)
tar -rvf archive.tar new-file

1.3 .tar.gz vs .tar.bz2 vs .tar.xz

格式 压缩速度 压缩率 适用场景
.tar.gz 日常使用,首选
.tar.bz2 对体积敏感,不急
.tar.xz 最慢 最高 发布包、长期存储

2. gzip / gunzip

gzip 只能压缩单个文件,压缩后原文件默认被替换为 .gz 文件。

# 压缩文件(原文件被替换)
gzip file.txt          # 生成 file.txt.gz,原文件消失

# 压缩并保留原文件
gzip -c file.txt > file.txt.gz

# 解压(.gz 文件被替换为原文件)
gunzip file.txt.gz

# 解压并保留压缩文件
gunzip -c file.txt.gz > file.txt

# 查看 .gz 文件内容(不解压)
zcat file.txt.gz

# 验证压缩文件完整性
gzip -t file.txt.gz

# 调整压缩级别(1=最快/最大,9=最慢/最小,默认 6)
gzip -9 file.txt

递归压缩目录下所有文件(gzip 不支持直接压缩目录):

find /path/to/dir -type f -exec gzip {} \;

3. zip / unzip

zip 可以直接压缩目录,Windows 和 Linux 都能用,跨平台场景首选。

# 压缩文件
zip archive.zip file1 file2

# 压缩整个目录(-r 递归)
zip -r archive.zip dir/

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

# 解压到指定目录
unzip archive.zip -d /opt/myapp/

# 查看压缩包内容(不解压)
unzip -l archive.zip

# 解压时跳过已存在的文件
unzip -n archive.zip

# 解压时覆盖已存在的文件
unzip -o archive.zip

4. 格式速查

后缀 解压命令
.tar tar -xvf file.tar
.tar.gz / .tgz tar -xzvf file.tar.gz
.tar.bz2 tar -xjvf file.tar.bz2
.tar.xz tar -xJvf file.tar.xz
.gz gunzip file.gz
.zip unzip file.zip