创建tar归档时添加目录

11
我想压缩一些文件(和目录),但希望创建一个额外的目录来存放这些文件。
例如,对于以下目录结构:
myproject
  + file1
  + file2
  + subdir1
    + file3

我进入了 myproject 目录并想要创建 tar 压缩包。
tar czf myproject.tgz --place-into-dir myproject-1.0 file2 subdir1

收到一个具有以下内容的 tar 归档文件:

myproject-1.0
  + file2
  + subdir1
    + file3

我正在寻找一个类似于虚构的“--place-into-dir”选项的选项。因此,文件不应直接放入存档中,而是放入一个额外的目录中,该目录仅在tar存档中创建。
我想避免先创建该目录,将所有文件复制到该目录,然后再删除它们,以便创建tar存档。

你是否在使用GNU tar?请检查tar --version的输出? - Inian
@Inian 是的,它是GNU tar。因此,kalj和Anton提供的--transform解决方案可行。谢谢。 - radlan
@Inian 我没有尝试过,但是你的例子并不符合我的要求。请看kalj和Anton的答案。 - radlan
在 Mac 上使用 bsdtar 时是否有解决方案?$ tar --version 返回 bsdtar 2.8.3 - libarchive 2.8.3tar --help 没有明显的提示,所以可能没有解决方案。 - Troy Daniels
2个回答

15

您可以使用--transform在归档文件中即时创建目录:

tar czf myproject.tgz --transform 's,^,myproject-1.0/,' file2 subdir1

2
在替换表达式中,目录名后面应该加上斜杠:'s,^,myproject-1.0/,' - Anton N. Petrov

5

GNU tar提供了--transform选项:

--transform=表达式, --xform=表达式

使用sed替换表达式来转换文件名

这应该会对您有所帮助:

tar --transform 's/^myproject$/\0-1.0/' -czf myproject.tgz myproject

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接