我有一个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
。