如何在 Linux 中提取 .dmg 文件?

如何在 Linux 中提取 .dmg 文件?

作为 Linux 用户,我需要获取包含应用程序安装程序的 .dmg(Mac OSX 磁盘映像)文件的内容。

我尝试过dmg2dir(这需要dmg2img),它创建了一个 .img 文件,但没有其他任何内容。

$ sudo dmg2dir jdk-8u51-macosx-x64.dmg
==> Routines successfully accomplished. Ready! 
==> Prepare loop device... 
==> Mount block device... 
Error looking up object for device /dev/disk/by-label/JDK\x208\x20Update\x2051 INTENSO openSUSE\x20Live\x20CD\x20GNOME dump
Variable is empty.

我只需要解压 .dmg 文件中的文件,我不想安装它。

如果你好奇的话,我需要这个来创建一个便携式开发环境,以便在无法提前准备的计算机上的研讨会上使用。

答案1

只需使用7z x

例如对于 Sublime text 来说,7z x "Sublime Text 2.0.2.dmg"提取所有文件就足够了。

在其他情况下,例如 JDK,您必须处理某种套娃。

$ 7z x jdk-8u51-macosx-x64.dmg
$ cd JDK 8 Update 51/
$ 7z x JDK 8 Update 51.pkg
$ 7z x Payload~

但最终您将获得一个包含您正在寻找的文件的文件夹。

答案2

有时 7z 无法正常工作。

使用https://sourceforge.net/projects/catacombae/files/HFSExplorer/0.23.1/对于这种情况

答案3

在 Mac 上,如果 dmg 是包含所有文件的目录的图像,则制作该目录的 tgz 而不是 dmg,然后迁移它。

#!/bin/bash
if [ -d "$1" ]; then  # $1 is the directory name
tar -cf "$1.tar" "$1" || exit  # First, create a tar-file
gzip -n -S .gz "$1.tar"  # Then ,gzip it to compress it.
mv "$1.tar.gz" "$1.tgz"  # Then rename it ti a .tgz
echo "Created $PWD/$1.tgz"
else echo "Not a directory"
fi
exit 0

相关内容