Как извлечь файл .dmg в Linux?

16159
qubodup

Как пользователь 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, я не хочу его монтировать.

Если вам интересно, мне нужно это для создания портативной среды разработки, которая будет использоваться на семинарах на компьютерах, которые не могут быть подготовлены заранее.

16
Это образ диска. Если кто-то не проделал всю работу (которую, я полагаю, 7z) сделал для записи программ чтения файловой системы в свою программу, самый простой способ - использовать модули файловой системы ядра Linux для чтения данных. Что означает монтаж. Zan Lynx 8 лет назад 1

3 ответа на вопрос

26
qubodup

Just use 7z x.

In the case of for example Sublime text, 7z x "Sublime Text 2.0.2.dmg" will be enough to extract all the files.

In other cases, like for example the JDK, you have to deal with some kind of matryoshka.

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

But eventually you will get a folder containing the files you're looking for.

Извлечение dmg-файлов с помощью 7z, по-видимому, пропускает исполняемые биты, делая извлеченные приложения из DMG дисфункциональными. Может быть связано: https://sourceforge.net/p/p7zip/bugs/113/ Motin 5 лет назад 0
1
albfan

Sometimes 7z do not work correctly.

Use https://sourceforge.net/projects/catacombae/files/HFSExplorer/0.23.1/ for that cases

1
Dick.Guertin

На 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 

Похожие вопросы