如何在Linux中解压缩.dmg文件?


19

作为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做过)将文件系统读取器写入他们的程序,否则最简单的方法是使用Linux内核文件系统模块读取数据。这意味着安装它。
Zan Lynx

Answers:


31

只需使用7z x

以Sublime文本为例,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~

但是最终您将获得一个包含要查找文件的文件夹。


使用7z提取dmg文件似乎会丢失可执行位,从而使从DMG提取的应用程序无法正常工作。可能相关:sourceforge.net/p/p7zip/bugs/113
Motin


1

在Mac上,如果dmg是包含所有文件的目录的映像,请对该目录而不是dmg进行tgz,然后迁移它。

#!/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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.