更新压缩的tar文件中的单个文件

20

假设有一个压缩文件application.tar.gz,其中包含了文件夹 application/x/y/z.jar等等,我希望能够用最新版本的 z.jar 文件来更新/刷新该压缩文件。

除了以下方法之外,是否还有其他方法可以实现呢?

tar -xzf application.tar.gz
cp ~/myupdatedfolder/z.jar application/x/y
tar -czf application application.tar.gz
我理解 tar 命令中的 -u 开关可以避免不必要地解包整个压缩包,但我不确定如何精确使用它。
4个回答

26

好的,我找到了答案。

你不能使用带有压缩文件的 tar -u 命令。所以我使用了以下解决方法。请注意,为此目的,我将 z.jar 文件移动到了当前目录下的名为 application/x/y 的文件夹中。

gzip -d application.tar.gz
tar -uf application.tar application/x/y/z.jar
gzip application.tar

更新前,在对应的gzip之前,我执行了一次tar -tf application.tar命令,结果正常显示。


10

如果你想更新的文件是文本文件,那么你可以直接使用vim编辑器打开包含该文件的tarball并进行修改,就像使用vim编辑器打开文件夹一样。然后修改文件并保存退出即可。

但是,如果该文件是二进制文件,我不知道解决方案。


我尝试过这个,但我只能编辑存档中的文件,无法保存修改后的文本文件到存档中,因为 vim 告诉我存档已经在另一个内存缓冲区中打开了。 - AlexFraser

5
在我的情况下,我必须执行以下步骤:删除该文件,然后添加新文件:

我的tar文件

file.tar
└── foo.json
└── bar.json
└── dir
    └── zoo.json

我只想修改/更新 foo.json 文件,而不需要提取并重新创建整个 tar 文件 file.tar,以下是命令:

tar -x -f file.tar foo.json # extract only foo.json file to my current location
# now modify the file foo.json as you want ...
tar --delete -f file.tar foo.json # delete the foo.json file from the file.tar
tar -uf file.tar foo.json # add the specific file foo.json to file.tar

压缩文件:

如果这是个压缩文件,比如file.tar.gz,你需要从压缩文件中提取tar文件(在这个例子中是gzip),使用gunzip file.tar.gz命令,它将为你创建一个tar文件file.tar,然后你就可以执行上面的步骤了。

最后,你需要使用gzip file.tar命令将tar文件重新压缩,它将为你创建一个名为file.tar.gz的压缩文件。

子目录:

为了处理子目录,你需要在文件系统中保持相同的结构。

tar -x -f file.tar dir/zoo.json
# now modify the file dir/zoo.json as you want ...
tar --delete -f file.tar dir/zoo.json
tar -uf file.tar dir/zoo.json

查看文件结构:

通过使用less命令,您可以查看文件的结构:

less file.tar

drwxr-xr-x root/root         0 2020-10-18 11:43 foo.json
drwxr-xr-x root/root         0 2020-10-18 11:43 bar.json
drwxr-xr-x root/root         0 2020-10-18 11:43 dir/zoo.json


1
我不确定您是否可以更新压缩存档(正如您在评论结尾处所建议的那样)。 - Shadow Template

-1
在Windows上,您可以使用7zip直接在存档中编辑文件。只需在7zip中打开存档,导航到文件并打开它。它应该在默认的系统文本编辑器中打开(如果没有/未知文件扩展名,则会显示打开对话框)。进行更改后,保存文件,然后7zip会询问您是否要将更改保存到存档中的文件中,您应该选择是。然后当您关闭7zip时,它会再次询问您是否要保存对整个存档的更改,您也应该选择是。存档的修改日期应该会更新,并且您始终可以以相同的方式再次打开它以检查更改是否已保存。我知道这适用于tar.gz和zip存档,但我还没有尝试过其他类型的存档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接