繁体   English   中英

有没有办法在不解压缩的情况下添加或更新 tar.gz(tgz) 中的文件?

[英]Is there a way to add or update file in tar.gz(tgz) without decompress?

我正在寻找更新 tgz 文件的方法。 我知道我可以通过解压缩、将文件插入目录并重新压缩来更新 tgz 文件。 但我不想在我的光盘中创建解压缩文件。

Tar 有 'r' 选项(--append)什么将文件附加到档案的末尾但是当我使用带有 'r' 选项的 tar 时,控制台记录'无法更新压缩档案。','错误不可恢复:现在退出。 '

如果不可能,我无能为力,但如果有办法,请告诉我。

我根据 Basile Starynkevitch 的评论修改了我的问题。

这是测试命令。

tar -rf myComppressedFile.tgz insert.txt

结果

tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now

vim 我的压缩文件.tgz

./file1.txt
./file2.txt
./file3.txt
./directory1/
./directory1/file4.txt

我要更新什么

./file1.txt
./file2.txt
./file3.txt
./directory1/
./directory1/file4.txt
./insert.txt <<<< I want to add like this file

我的 tgz 文件大约有 100 兆字节。

有没有办法在不解压缩的情况下添加或更新 tar.gz(tgz) 中的文件?

不,没有办法。

由于gzip压缩发生在整个tar存档上(在制作tar球之后)。 使用strace(1) (因此阅读syscalls(2) )或ltrace(1)观察tar命令的运行时行为

阅读tar(1)的文档。 研究GNU tar的源代码(它是自由软件)。

在我的 Debian/Sid/x86-64 上, libc6-dev package 提供了/usr/include/tar.h header。我请你看看那个 header 文件,它描述了tar包的格式。

考虑使用其他方法:一些sqlite数据库,使用postgresqlmongodbGDBM ,一些afio存档(每个文件在存档之前可能被压缩)。 另请参阅tardy实用程序。

我正在寻找更新 tgz 文件的方法

为什么?

您是否考虑过在使用tar归档之前对底层文件使用版本控制 git这样的东西?

但是我不想在我的磁盘中创建解压缩文件。

为什么?

解压后的文件可能是临时文件....

当然,如果您处理几兆字节的数据或几 PB 的数据,则需要采用不同的方法。 当然,如果您正在开发关键的嵌入式应用程序(例如医疗设备、interpl.netary 卫星软件、 DO-178C软件系统),情况可能会有所不同。

有很多权衡需要考虑(包括金钱和开发时间以及数据丢失或损坏档案的经济影响以及关于档案及其数据完整性的法律规定:在飞行记录器中,您应该确保数据在飞机失事)。

我的 tgz 文件大约有 100 兆字节。

这是很小的,实际上可以放入页面缓存中(对于 2020 年的大多数 Linux 系统,甚至是便宜的RaspBerryPi )。 您可能会使用一些保存在 RAM 中的文件系统(例如tmpfs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM