如何从已更新的 tarball 中提取/删除旧文件

如何从已更新的 tarball 中提取/删除旧文件

我有一个tarball名字test.tar,我首先通过运行创建它:

echo start > 1
tar -cf test.tar 1

然后更新它:

echo end > 1
tar -uf test.tar 1

现在,如果我获得此 tar 存档中的文件列表:

$ tar -tx test.tar

它给了我:

1
1

如果我尝试查看这些文件中的内容:

$ tar -xOf test.tar

start
end

最后当我想提取它时:

$ tar -xf test.tar 1
$ cat 1
end

有没有办法提取旧版本的1? (包含 的那个start)。

另一件事是删除这些文件,当我使用--delete参数时,它将从存档中删除具有该名称的所有文件。我怎样才能只删除旧的或新的?

答案1

这里

--occurrence[=number]

--delete该选项可以与子命令 > 、之一结合使用--diff--extract或者--list在命令行或通过选项给出文件列表时使用-T

此选项指示 tar 仅处理每个命名文件的第 次出现。数字默认为 1,所以

tar -x -f archive.tar --occurrence filename

将提取第一次出现的成员filename' from >archive.tar' 并将终止而不扫描到存档末尾。

因此,在您的情况下,要提取旧版本,请使用:

tar -xf test.tar --occurrence=1 1

对于删除运行:

tar --delete -f test.tar --occurrence=1 1

提取两个版本的另一个解决方法是简单地使用--backupswitch:

tar -xf test.tar --backup

它将提取您的文件,例如:

1
1~

1~是旧的。如果您有两个以上版本,请改用--occurrenceswitch。

您还可以使用-w交互tar模式:

tar -xf test.tar -w

这次tar要求您进行每个操作,您可以选择要提取的第一个版本或最后一个版本y/n

相关内容