tar 追加是什么
GNU tar 的 -r、-u、-A 是在已有归档上做增补的三种模式:-r 把文件或目录直接追加到包尾,-u 只在文件比包内同名成员更新时才写入,-A 把另一个 tar 包整体接进来。它们都要求目标是未压缩的 .tar,因为压缩流一旦生成就无法在中间插入数据。适合每日往同一个包补日志、把分段备份合并成一个大包这类场景。
基本信息
| 适用平台 | GNU tar(CentOS/Ubuntu 自带);BSD tar(macOS)支持 -r 与 -A |
|---|---|
| 语法 | tar -rf 包 文件 / tar -uf 包 文件 / tar -Af 包1 包2 |
| 权限要求 | 对目标 tar 文件有写权限 |
| 硬性限制 | 仅未压缩 .tar,压缩包必须先解开或整体重建 |
典型使用场景
- 每日把新日志追加进同一个归档,避免全量重打一遍
- 备份窗口内把若干分段包合并成一个完整包,便于异地归档
- 只把发生过变化的文件补进包,由 -u 依据 mtime 判断
- 临时往历史包里补几个配置文件后交付出去
- 现成包漏了文件时不必解包重压,直接追加
常用示例
常用示例
tar -rf data.tar newfile.log # 追加单个文件到包尾
tar -rf data.tar dir2/ # 追加整个目录(内容进包)
tar -uf data.tar changed.log # 仅当它比包内成员新才追加
tar -rf data.tar --exclude='*.tmp' dir2/ # 追加时排除临时文件
tar -tf data.tar | tail -5 # 列出成员,确认追加结果
tar -Af part1.tar part2.tar # 把 part2 整体接到 part1 尾部
tar -tvf data.tar | head # 带权限与时间戳复核内容-r/-u/-A 对照
| 操作 | 含义 | 注意 |
|---|---|---|
| -r | 无条件追加文件或目录到包尾 | 包内已有同名成员不会覆盖,会出现两份 |
| -u | 仅当文件 mtime 更新时追加 | 不删除包内旧副本,解包时后者覆盖前者 |
| -A | 把另一个 tar 包拼接进来 | 两侧都必须是未压缩 tar |
压缩包想做同样的事:先 gunzip 解出 .tar 再操作重压,或干脆 tar -cf 重建一个包。长期维护的包建议定期重建,重建能顺带丢掉历史残留的旧成员。
-u 的语义是「追加更新过的文件」,不是「同步」:包内被删除的文件不会消失,同名旧版本也还在,别把它当成增量备份的完整性保证。