linux - 在 bash 创建的 tar 中排序文件

标签 linux bash tar ova

知道如何按特定顺序压缩文件。我知道一开始听起来很奇怪,但请听我说完。 OVA 文件本质上是一个 tar 文件,但具有特定的顺序。 Tar 通常用于创建文件,但为了让 OVA 被 VMware 等 HyperVisors 识别,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

最佳答案

问题是您只是使用了一个 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 可能会以不同的顺序扩展,但我在这里做了一些假设。

关于linux - 在 bash 创建的 tar 中排序文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118311/

相关文章:

bash - 在shell中过滤出文件中匹配的记录

python - 在 extractall 之前检查 tar 存档

使用--to-command的TAR

node.js - su 命令无法识别 Node 服务 - ubuntu

c - 使用 gdb 调试正在运行的守护进程

Linux同步与FIFO等待队列

linux - 无法打开 uid_map 以从具有 cap_setuid 功能集的应用程序写入

linux - 通过shell脚本编辑一个js文件

python - 如何将Python库卡住到Linux程序中?

linux - 解压tar tar.bz2 文件报错