可直接用 tar -rvf 向未压缩的 .tar 文件追加文件,但不支持 .tar.gz 等压缩格式;后者需先解压、添加、再重打包,且 -u 选项可仅更新归档中已存在的较新文件。

可以直接用 tar -rvf 命令向未压缩的 .tar 文件末尾追加文件,但不能对 .tar.gz、.tar.bz2 等已压缩归档直接操作——因为压缩后的文件结构不支持随机写入。
确认归档类型再操作
先检查目标文件是否为纯归档(未压缩):
- 运行
file archive.tar,若输出含POSIX tar archive,说明可追加 - 若输出含
gzip compressed data或bzip2 compressed data,说明已被压缩,需先解压再重建 - 也可用
tar -tf archive.tar > /dev/null && echo "ok"测试能否正常读取列表;失败则大概率是压缩格式
向纯 .tar 文件追加文件
语法简单,但注意路径和权限:
-
tar -rvf archive.tar new_file—— 追加单个文件 -
tar -rvf archive.tar dir/—— 追加整个目录(含子内容) - 追加后建议立即验证:
tar -tf archive.tar | tail -5查看最后几项是否包含新内容 - 操作用户需对
archive.tar有写权限,且对要追加的文件有读权限
想往 .tar.gz 里加文件?得绕一下
没有直接方法,可靠做法是解包→添加→重打包:
- 解压:
tar -xzf archive.tar.gz -C /tmp/extract/ - 复制新文件进去:
cp new_file /tmp/extract/ - 重新打包压缩:
tar -czf archive.tar.gz -C /tmp/extract/ . - 清理临时目录:
rm -rf /tmp/extract - 如需保留原时间戳,加
--touch或在解压时用-m忽略修改时间(视需求而定)
更高效的替代方案:用 -u 更新模式
如果只是想“更新归档中已有的同名文件”,-u 比 -r 更精准:
-
tar -uvf archive.tar updated_file—— 仅当updated_file比归档内同名文件新时才替换 - 不会重复存多个同名文件,避免归档膨胀
- 同样只适用于未压缩的
.tar,不支持.gz等格式


















