只能向未压缩的 .tar 文件追加文件,使用 --append(或 -r)选项;.tar.gz 等压缩归档不支持直接追加,须先解压、合并再重压。

不能直接向已有 tar 归档中“动态追加”文件,tar 本身不支持在归档末尾实时插入新内容(尤其当归档已压缩或跨设备存储时)。但可通过“重建 + 追加”方式实现效果:即解包旧归档、加入新备份文件、重新打包。若需自动化且高效,推荐用 --append(仅适用于未压缩的 .tar 文件,且必须是本地普通文件系统上的可写归档)。
确认归档是否支持 --append
只有未压缩的原始 .tar 文件才支持追加。如果归档是 .tar.gz、.tar.xz 或 .tar.bz2,必须先解压再重建——--append 对压缩归档会报错。
- 检查文件类型:
file backup.tar→ 输出含 “POSIX tar archive” 才可用--append - 确保归档位于本地磁盘(非 NFS、CIFS 或只读挂载点),且有写权限
使用 --append 追加单个数据库备份文件
假设你刚用 mysqldump 或 pg_dump 生成了新备份 db_20240615.sql,想加进 backups.tar:
- 执行追加:
tar --append --file=backup.tar db_20240615.sql - 验证是否成功:
tar -tf backup.tar | tail -5查看最后几条记录 - 注意:追加后无法删除归档内已有文件,也不能修改已有条目
对压缩归档(如 .tar.gz)实现“逻辑追加”
这是更常见场景。需临时解包、合并、重压:
- 创建临时目录:
mkdir /tmp/tar_merge && cd /tmp/tar_merge - 解压原归档:
tar -xzf /path/to/backup.tar.gz - 复制新备份进去:
cp /path/to/db_20240615.sql ./ - 重新打包压缩:
tar -czf /path/to/backup.tar.gz * - 清理:
cd .. && rm -rf /tmp/tar_merge
生产环境建议:改用增量归档策略
频繁追加会使 tar 文件越来越大、恢复变慢、校验困难。更健壮的做法是:
- 按日期命名独立备份:
backup_20240615.tar.gz、backup_20240616.tar.gz - 用
find ... -mtime -7 -name "*.tar.gz" -exec tar -Af weekly.tgz {} \;合并最近 7 天(仅限 .tar 格式) - 配合
rsync或对象存储(如 S3)做版本化存储备份,比单个大 tar 更可靠











