在 tarball 中指定根目录

Pis*_*tos 7 root extract tar archiving

有没有办法执行

tar cjvf foo.tar.bz2 project-root
Run Code Online (Sandbox Code Playgroud)

这样当 tarball 被提取时,它不会提取到项目根目录,而是提取到其他东西?IE

tar xjvf foo.tar.bz2
cd something-else
# see all files that were within original project-root
Run Code Online (Sandbox Code Playgroud)

我知道 -C,但我希望它不存在其他东西。

qua*_*ote 2

您可以使用7-zip GUI(也可能还有其他归档程序)重命名tarball 中的项目根目录,但这可能会对压缩的 tarball 执行完整的解压-重新压缩循环。(阅读:对于大的、严重压缩的 tarball,这可能需要一段时间。)

执行您想要的操作的最佳方法是在创建 tarball 之前更改名称。一个简单的方法是将project-root临时重命名为Something-else

# temporary rename; tar; restore original name
$ mv project-root something-else ; tar cjf foo.tar.bz2 something-else ; mv something-else project-root
Run Code Online (Sandbox Code Playgroud)

我可能会变得更复杂一些:用我想要的 tarball 名称制作一个副本。这可以避免在以后可能使用的任何修复过程中出现潜在的错误或错过的步骤,并且我可能希望保留两个副本用于其他目的。

# make me a copy
$ ( cd project-root ; tar cf - . ) | ( mkdir something-else; cd something-else; tar xf - )

# test the copy here if needed
$ diff -r --brief project-root/ something-else/

# create my tarball
$ tar cjf foo.tar.bz2 something-else
Run Code Online (Sandbox Code Playgroud)