npx machina-cli add skill chaterm/terminal-skills/tar-compression --openclaw归档与压缩
概述
tar/gzip/xz 归档压缩、分卷备份技能。
tar 基础
创建归档
# 创建 tar 归档
tar -cvf archive.tar /path/to/dir
# 创建并 gzip 压缩
tar -czvf archive.tar.gz /path/to/dir
# 创建并 bzip2 压缩
tar -cjvf archive.tar.bz2 /path/to/dir
# 创建并 xz 压缩
tar -cJvf archive.tar.xz /path/to/dir
# 多个目录/文件
tar -czvf archive.tar.gz dir1 dir2 file1.txt
解压归档
# 解压 tar
tar -xvf archive.tar
# 解压 gzip
tar -xzvf archive.tar.gz
# 解压 bzip2
tar -xjvf archive.tar.bz2
# 解压 xz
tar -xJvf archive.tar.xz
# 解压到指定目录
tar -xzvf archive.tar.gz -C /target/dir
查看内容
# 列出内容
tar -tvf archive.tar
tar -tzvf archive.tar.gz
# 搜索文件
tar -tzvf archive.tar.gz | grep "filename"
常用选项
# 排除文件/目录
tar -czvf archive.tar.gz --exclude='*.log' --exclude='cache' /path
# 从文件读取排除列表
tar -czvf archive.tar.gz --exclude-from=exclude.txt /path
# 保留权限
tar -czvf archive.tar.gz --preserve-permissions /path
# 增量备份
tar -czvf archive.tar.gz --newer='2024-01-01' /path
压缩工具
gzip
# 压缩
gzip file.txt # 生成 file.txt.gz,删除原文件
gzip -k file.txt # 保留原文件
gzip -9 file.txt # 最高压缩率
# 解压
gunzip file.txt.gz
gzip -d file.txt.gz
# 查看压缩文件
zcat file.txt.gz
zless file.txt.gz
zgrep "pattern" file.txt.gz
bzip2
# 压缩
bzip2 file.txt
bzip2 -k file.txt # 保留原文件
bzip2 -9 file.txt # 最高压缩率
# 解压
bunzip2 file.txt.bz2
bzip2 -d file.txt.bz2
# 查看
bzcat file.txt.bz2
xz
# 压缩
xz file.txt
xz -k file.txt # 保留原文件
xz -9 file.txt # 最高压缩率
xz -T 4 file.txt # 多线程
# 解压
unxz file.txt.xz
xz -d file.txt.xz
# 查看
xzcat file.txt.xz
zstd
# 压缩
zstd file.txt
zstd -19 file.txt # 最高压缩率
zstd -T0 file.txt # 自动多线程
# 解压
unzstd file.txt.zst
zstd -d file.txt.zst
分卷备份
split 分割
# 按大小分割
split -b 100M archive.tar.gz archive.tar.gz.part_
# 按行分割
split -l 10000 largefile.txt part_
# 合并
cat archive.tar.gz.part_* > archive.tar.gz
tar 分卷
# 创建分卷
tar -czvf - /path/to/dir | split -b 100M - backup.tar.gz.part_
# 解压分卷
cat backup.tar.gz.part_* | tar -xzvf -
常见场景
场景 1:网站备份
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
WEB_DIR="/var/www/html"
# 创建备份
tar -czvf ${BACKUP_DIR}/web_${DATE}.tar.gz \
--exclude='*.log' \
--exclude='cache/*' \
${WEB_DIR}
# 保留最近 7 天
find ${BACKUP_DIR} -name "web_*.tar.gz" -mtime +7 -delete
场景 2:数据库备份压缩
# MySQL
mysqldump -u root -p database | gzip > db_backup.sql.gz
# 解压恢复
gunzip < db_backup.sql.gz | mysql -u root -p database
# PostgreSQL
pg_dump database | xz > db_backup.sql.xz
场景 3:增量备份
#!/bin/bash
SNAPSHOT="/backup/snapshot.snar"
BACKUP_DIR="/backup"
SOURCE="/data"
# 完整备份(首次)
tar -czvf ${BACKUP_DIR}/full.tar.gz -g ${SNAPSHOT} ${SOURCE}
# 增量备份
tar -czvf ${BACKUP_DIR}/incr_$(date +%Y%m%d).tar.gz -g ${SNAPSHOT} ${SOURCE}
场景 4:远程备份
# 本地压缩后传输
tar -czvf - /path/to/dir | ssh user@remote "cat > /backup/archive.tar.gz"
# 远程压缩
ssh user@remote "tar -czvf - /path/to/dir" > local_backup.tar.gz
压缩对比
| 格式 | 压缩率 | 速度 | 内存 | 适用场景 |
|---|---|---|---|---|
| gzip | 中 | 快 | 低 | 日常备份 |
| bzip2 | 高 | 慢 | 中 | 归档存储 |
| xz | 最高 | 最慢 | 高 | 长期存储 |
| zstd | 高 | 快 | 中 | 现代备份 |
故障排查
| 问题 | 排查方法 |
|---|---|
| 解压失败 | 检查文件完整性、格式 |
| 空间不足 | 使用管道、分卷 |
| 权限丢失 | 使用 --preserve-permissions |
| 文件损坏 | 使用 gzip -t 测试 |
# 测试压缩文件
gzip -t file.gz
bzip2 -t file.bz2
xz -t file.xz
# 修复损坏的 gzip
gzrecover file.gz
# 查看压缩信息
gzip -l file.gz
Source
git clone https://github.com/chaterm/terminal-skills/blob/main/backup/tar-compression/SKILL.mdView on GitHub Overview
本技能提供使用 tar 及常见压缩工具(gzip、bzip2、xz、zstd)进行归档、压缩与分卷备份的完整流程。通过示例展示创建、解压、查看以及在网站备份、数据库备份、增量备份和远程备份等场景中的应用。
How This Skill Works
核心通过 tar 的创建 (-c) 和不同压缩选项来生成归档,例如 gzip 使用 -z、bzip2 使用 -j、xz 使用 -J;并使用 --exclude、--exclude-from、--preserve-permissions、-g 进行排除、权限保留和增量备份。对于大文件可结合 split 进行分卷备份,解压时使用 tar -xvf 相应格式的归档,或 tar -xvf -C 目标目录进行指定目录解压。
When to Use It
- 场景 1:网站备份
- 场景 2:数据库备份压缩
- 场景 3:增量备份
- 场景 4:远程备份
- 场景 5:分卷大文件归档与恢复
Quick Start
- Step 1: 识别要打包的目录或文件,并决定是否需要排除规则。
- Step 2: 选择压缩方式并执行 tar 命令,例如 tar -czvf backup.tar.gz /path/to/dir,必要时加入 --exclude,-g 或 -C。
- Step 3: 验证归档可用性,并按需进行恢复测试或分卷传输。
Best Practices
- 使用 --exclude 或 --exclude-from 过滤不需要备份的文件,如日志或缓存。
- 结合 --preserve-permissions 保留文件权限,确保还原一致性。
- 利用 -g 实现增量备份,简化后续恢复与存档管理。
- 如数据量大,使用分卷(split)管理大文件,避免单一大归档难以传输。
- 在同一备份计划中混合多种压缩格式(gzip/xz/zstd)以平衡速度与存储成本,并定期校验归档完整性。
Example Use Cases
- 网站备份示例:tar -czvf backup.tar.gz --exclude='*.log' --exclude='cache/*' /var/www/html
- 数据库备份压缩示例:mysqldump -u root -p database | gzip > db_backup.sql.gz;PostgreSQL:pg_dump database | xz > db_backup.sql.xz
- 增量备份示例:首次 tar -czvf full.tar.gz -g /backup/snapshot.snar /data;增量 tar -czvf incr_$(date +%Y%m%d).tar.gz -g /backup/snapshot.snar /data
- 远程备份示例:tar -czvf - /path/to/dir | ssh user@remote 'cat > /backup/archive.tar.gz';本地接收:ssh user@remote 'tar -czvf - /path/to/dir' > local_backup.tar.gz
- 分卷备份示例:tar -czvf - /path/to/dir | split -b 100M - backup.tar.gz.part_;解压分卷:cat backup.tar.gz.part_* | tar -xzvf -
Frequently Asked Questions
Related Skills
backup-strategy
chaterm/terminal-skills
备份策略设计
maintenance
chaterm/terminal-skills
OpenClaw 运维与故障修复
cloud-backup
chaterm/terminal-skills
云备份方案
snapshot
chaterm/terminal-skills
--- name: snapshot description: 快照管理 version: 1.0.0 author: terminal-skills tags: [backup, snapshot, lvm, btrfs, zfs, cloud] --- # 快照管理 ## 概述 LVM 快照、文件系统快照、云快照管理技能。 ## LVM 快照 ### 创建快照 ```bash # 查看逻辑卷 lvs lvdisplay # 创建快照 lvcreate -L 10G -s -n snap_data /dev/vg0/data # 创建薄快照 lvcreate -s -n snap