如何无需重建归档即可向大型归档文件添加文件?
解决方案
1. Tar 归档(优先推荐无压缩高频场景)
Tar 原生支持追加模式,无需重建整个归档:
- 追加命令:
tar -rf your_archive.tar path/to/new_file - 操作仅在现有归档末尾写入新文件数据,耗时仅与新文件大小相关,完全适配高频运行需求。
- 压缩场景适配:
- 若需要压缩,常规
tar.gz/tar.bz2因是整体压缩无法直接追加,可先高频追加到未压缩tar,再在非高峰时段批量压缩成压缩格式。 - 也可使用 zstd 的
--seekable参数创建可随机访问的压缩包,通过管道实现追加:
虽会生成临时文件,但仍远快于重建整个归档。zstdcat archive.tar.zstd | tar -rf - new_file.txt | zstd --seekable > temp.tar.zstd && mv temp.tar.zstd archive.tar.zstd
- 若需要压缩,常规
2. Zip 追加模式(解决你之前的重建问题)
标准Zip格式支持追加,你之前遇到的重建问题大概率是未使用正确参数:
- 追加命令:
zip -g your_archive.zip path/to/new_file -g参数为“grow”模式,直接将新文件写入现有Zip末尾,不会重建整个归档。即使是10GB级的Zip,追加小文件仅需几百毫秒,完全满足高频运行要求。- 若Zip采用高压缩率创建,追加时会沿用相同压缩设置,小文件的压缩开销可忽略。
3. 7-Zip 追加模式
7z格式同样支持高效追加:
- 追加命令:
7z u your_archive.7z path/to/new_file -u参数表示更新/追加,仅写入新文件数据。若无需压缩,可添加-mx0参数创建无压缩7z归档,追加速度进一步提升。
4. 自定义轻量归档(极端高频场景)
若上述工具仍无法满足极致高频需求(如每秒数十次追加),可自行实现极简归档:
- 维护一个文本索引文件
index.txt,每行记录文件名|起始偏移|文件大小。 - 创建二进制数据文件
data.bin,每次追加时直接将文件内容写入data.bin末尾,同时在index.txt追加对应记录。 - 最终将
index.txt与data.bin打包为单个文件上传云端,此方式几乎无额外开销,完全即时。
内容的提问来源于stack exchange,提问作者K1ll3rM
相关产品推荐
相关产品推荐

