我想 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。
谢谢!✌️