![如何从已更新的 tarball 中提取/删除旧文件](https://linux22.com/image/110639/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%B7%B2%E6%9B%B4%E6%96%B0%E7%9A%84%20tarball%20%E4%B8%AD%E6%8F%90%E5%8F%96%2F%E5%88%A0%E9%99%A4%E6%97%A7%E6%96%87%E4%BB%B6.png)
我有一个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
提取两个版本的另一个解决方法是简单地使用--backup
switch:
tar -xf test.tar --backup
它将提取您的文件,例如:
1
1~
这1~
是旧的。如果您有两个以上版本,请改用--occurrence
switch。
您还可以使用-w
交互tar
模式:
tar -xf test.tar -w
这次tar
要求您进行每个操作,您可以选择要提取的第一个版本或最后一个版本y/n
。