如何为 tar 指定不同的“顶级”名称?

如何为 tar 指定不同的“顶级”名称?

我想 tar root (/) 并让它在 tar 存档中显示为 /abc。

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

答案1

我能找到的最接近的是--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 /

答案3

以下是我的做法,它适用于从任何位置(不仅仅是 /)进行焦化:

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

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

答案4

基于@terdon的出色回答,一个更“说教”的例子......

tar -czf "MY_NEW_FOLDER_NAME.tar.gz" --transform "s/^\.\/MY_FOLDER_NAME/MY_NEW_FOLDER_NAME/" "./MY_FOLDER_NAME"

重要的:请注意,^\.\/MY_FOLDER_NAME必须准确反映目标目录“./MY_FOLDER_NAME”的路径。

您可以尝试构建正则表达式: SED 兼容在线转义字符GNU sed REPL

谢谢!✌️

相关内容