从bash创建的tar文件中排序文件

7
有没有办法按照特定顺序打包文件呢?一开始听起来可能有点奇怪,但请听我解释。OVA文件本质上是一个tar文件,但其中包含了特定的顺序。通常可以使用Tar来创建文件,但为了使得像VMware这样的HyperVisors能够识别OVA中的文件,必须以非常特定的方式排序OVA中的文件。.ovf文件必须首先出现在OVA中,其他文件必须按照.ovf内列出的顺序出现。以下是一个简单的树形结构示意图:
VM.ova--
       |
       |--VM.ovf
       |--VM.mf
       |--VM.vmdk
       |--VM.iso

那就是正确的顺序。当我尝试使用tar创建ova时,它可以工作,但顺序不对。这里是我的操作步骤。实际上非常基本。

tar -cvf VM.ova *

我只需要进入包含需要添加到OVA的所有内容的文件夹,然后运行tar命令即可。请帮我正确排序这些文件。如果我们无法解决此问题,则VM将永远无法与任何HyperVisor一起使用。谢谢!
*更新*
当前tar默认按以下顺序排序:vmdk、iso、mf、ovf。
1个回答

11
问题在于你只是使用通配符*来列出文件。通配符会在tar看到它之前就立即扩展,因此tar真正看到的是:

问题在于您只是使用通配符*列出文件。通配符会立即扩展,而tar在看到它之前,所以tar实际上看到的是:

tar -cvf VM.ova VM.iso VM.mf VM.ovf VM.vmdk

因为在正常情况下,通配符会在 C 对照区域中按字典顺序进行扩展。如果顺序很重要,您可以手动列出文件:

tar -cvf VM.ova VM.ovf VM.mf VM.vmdk VM.iso

或者使用括号扩展来节省一些输入

tar -cvf VM.ova VM.{ovf,mf,vmdk,iso}

*如果您更改LC_*变量,可能会使glob以不同的顺序扩展,但我在这里做出了一些假设。


太好了,谢谢!我在问完这个问题一分钟后终于意识到了,但你仍然得到了认可。非常感谢您的回复。一旦允许我选择答案,我会立即选择。哇,我真是太蠢了... - Atomiklan

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