焦油解除只有1个级别

我使用下面的伪脚本来创build我安装的软件的TAR

mkdir tmp ln -s /path/to/app1/bin tmp/app1 ln -s /and/path/going/to/the-app-2 tmp/app2 tar -c --dereference -f apps.tar tmp 

我需要在这里使用--dereference选项来跟随我在tmp的链接。 我首先创build链接的原因是将文件夹中不同名称的目录存储在文件系统中。

到现在为止,它工作得很好。 不过,我现在有这样的情况, /path/to/app1也包含链接,而我不想遵循这些链接。

这是可能的一些更改的tar命令? 还是需要彻底改变我build立档案的方式?

我不认为有一个办法只是部分解除引用。 你可以做类似的事情

 tar -cf apps.tar /path/to/app1/bin /and/path/going/to/the-app-2 

然后使用-C将它们提取到不同的根

-C,–directory = DIR

  change to directory DIR 

例如

 mkdir tmp tar -C tmp -xf apps.tar 

这与您当前创build存档的方式具有相似的效果。

您可以使用-C来指向任何现有的目录。

你真的需要tarball中的目录结构与磁盘上的目录结构不同吗?

如果不是的话,那么你可以直接把它们打上:

 tar -cf file.tar /path/1 /path/2 

而不是链接,我可以复制。 不幸的是,它会增加一些开销(文件相当大)。 当然,它会增长至多两倍,因为油渍本身也是一种复制forms。

如果你是root那么最好的办法就是使用mount的bind命令来基本上硬连接你要tar的目录,而不是symlinking。 那么你将不需要使用取消引用选项。

 mkdir tmp mount --bind /path/to/app-1 tmp/app-1 mount --bind /path/to/app-2 tmp/app-2 tar cf apps.tar tmp 

一定要在意外发生之前卸载这些目录。 看到这些警告 。