做什么
把多个文件打包成一个文件(archive)——通常配合压缩。
必记的两个命令
# 打包 + gzip 压缩
tar -czvf archive.tar.gz folder/
# ↓
# c=create z=gzip v=verbose f=file
# 解压
tar -xzvf archive.tar.gz
# ↑
# x=extract
参数速记
| 字 | 含义 |
|---|---|
c |
create(打包) |
x |
extract(解压) |
t |
list(仅查看不解压) |
z |
gzip |
j |
bzip2 |
J |
xz |
a |
按后缀自动选压缩方式 |
v |
verbose |
f |
file(指定文件名,必须) |
实战
# 查看(不解压)
tar -tzvf archive.tar.gz
# 解压到指定目录
tar -xzvf archive.tar.gz -C /tmp/
# 只解压某文件
tar -xzvf archive.tar.gz folder/file.txt
# 排除某目录
tar --exclude='*/cache/*' -czvf backup.tar.gz /home/wadely
# xz 极致压缩(慢但小)
tar -cJvf logs.tar.xz /var/log/
# 不落地直接传到远程
tar czf - folder/ | ssh user@remote 'tar xzf - -C /backup/'
# 增量备份(基于 snapshot)
tar -czf full.tar.gz -g snapshot.snar folder/
tar -czf incr1.tar.gz -g snapshot.snar folder/ # 第二次 = 增量
常见后缀
.tar 只打包,不压缩
.tar.gz / .tgz + gzip
.tar.bz2 / .tbz + bzip2
.tar.xz + xz(最小)
.tar.zst + zstd(最快)
压缩比对比(粗略)
| 工具 | 速度 | 压缩比 |
|---|---|---|
| gzip | 快 | 中 |
| bzip2 | 中 | 较高 |
| xz | 慢 | 最高 |
| zstd | 极快 | 高 ★ |
新项目可以用 zstd:
tar --use-compress-program=zstd -cf archive.tar.zst folder/
验证压缩包
gzip -t archive.tar.gz && echo OK # 检查 gzip 完整
tar -tzf archive.tar.gz > /dev/null && echo OK
坑
tar不带f会跑去用 tape 设备(老古董设计)—— 永远带f- 在 / 下面创建 tar 时(如
tar -czf /tar root/)小心别把 archive 自己也打包进去 - 绝对路径开头的
/会被 tar 默认去掉——解压时不会还原到/,是相对当前目录