如何为tar指定其他“顶层”名称?


10

我想对tar根目录(/)进行设置,并使其在tar归档文件中显示为/ abc。

是否有用于指定自定义顶级名称的tar标志?

Answers:


6

我能找到的最接近的--transform选项。我不确定,但是我猜这是仅GNU的标志:

 --transform, --xform EXPRESSION
       use sed replace EXPRESSION to transform file names

使用它,您可以传递sed替换命令并将更改//abc

tar cf root.tgz --transform 's/^\//\/abc/' /

/创建归档文件/abc时,它仍然会打印路径,但是在提取归档文件时,它们会变为路径。


如果您tar没有--transform选择的另一种方法是,使/abc符号链接指向/然后将其tar:

$ ln -s / /abc
$ tar chf root.tgz /abc

-h是必不可少的,因为这是tar要遵循的链接:

 -h, --dereference
       follow symlinks; archive and dump the files they point to

这将具有设置/abc为顶级目录的作用。


2

使用GNU tar,可以使用该命令:

tar --transform="s|/|/abc/|" -Pcf bar.tar /

否则,这是一种可移植的方法,即不依赖GNU或其他特定tar扩展,但基于POSIX工具的方法,该工具应可在任何Unix兼容的计算机上使用:

pax -w -s '/\//\/abc\//' -f foo.tar /

1

这是我的操作方法,可在任何位置(不仅仅是/)进行涂抹:

tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *

它只是将a附加/abc/到每个路径的开头。


1
提取以这种方式创建的存档时,我会收到警告tar: Removing leading / from member names。使用's|^|abc/|'对我来说效果很好。
Michael Plates
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.