压缩与解压缩
总结
- 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 |