【问题标题】:Ordering files inside tar created from bash从 bash 创建的 tar 中的排序文件
【发布时间】:2014-01-14 16:14:21
【问题描述】:

知道如何按特定顺序 tar 文件。我知道一开始听起来很奇怪,但请听我说完。 OVA 文件本质上是一个 tar 文件,但具有特定的顺序。 Tar 通常用于创建文件,但为了使 OVA 能够被 VMware 等 HyperVisor 识别,必须以非常特定的方式对 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

【问题讨论】:

    标签: linux bash tar ova


    【解决方案1】:

    问题在于您只是在使用 glob * 来列出文件。 glob 在tar 看到它之前立即展开,所以 tar 真正看到的是:

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

    因为在正常*情况下,glob 在 C 排序语言环境中进行词法扩展。如果顺序很重要,您可以手动列出文件:

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

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

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

    *如果你弄乱了 LC_* 变量,glob 可能会以不同的顺序展开,但我在这里做了一些假设。

    【讨论】:

    • 非常感谢!在我问了这个问题一分钟后,我终于意识到了这一点,但你仍然得到了信任。非常感谢您的回复。只要它允许我就会选择作为答案。哇,我是愚蠢的......
    猜你喜欢
    • 1970-01-01
    • 2018-11-15
    • 2013-05-22
    • 2014-01-19
    • 2023-04-01
    • 2011-09-19
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多