Como extrair um arquivo .dmg no Linux?

16

Como usuário do Linux, preciso obter o conteúdo de um arquivo .dmg (imagem de disco do Mac OSX) que contém um instalador de aplicativos.

Eu tentei dmg2dir (que requer dmg2img ) que criou um arquivo .img mas nada mais.

$ 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.

Eu só preciso dos arquivos do arquivo .dmg descompactados, não quero montá-lo.

Caso você esteja curioso, eu preciso disso para criar um ambiente de desenvolvimento portátil para ser usado em workshops em computadores que não podem ser preparados antecipadamente.

    
por qubodup 17.08.2015 / 01:49

3 respostas

26

Use apenas 7z x .

No caso de, por exemplo, texto sublime, 7z x "Sublime Text 2.0.2.dmg" será suficiente para extrair todos os arquivos.

Em outros casos, como por exemplo o JDK, você tem que lidar com algum tipo de matryoshka.

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

Mas, eventualmente, você receberá uma pasta contendo os arquivos que está procurando.

    
por 17.08.2015 / 01:49
1

Às vezes, o 7z não funciona corretamente.

Use o link para esses casos

    
por 15.02.2016 / 20:54
1

No Mac, se o dmg for uma imagem de um diretório contendo todos os arquivos, faça um tgz do diretório em vez de um dmg e migre-o.

#!/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
    
por 12.07.2017 / 20:01