我使用下面的伪脚本来创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
一定要在意外发生之前卸载这些目录。 看到这些警告 。