Come estrarre un file .dmg in Linux?


19

Come utente Linux, devo ottenere il contenuto di un file .dmg (immagine disco Mac OSX) che contiene un programma di installazione dell'applicazione.

Ho provato dmg2dir(che richiede dmg2img) che ha creato un file .img ma nient'altro.

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

Ho solo bisogno di decomprimere i file dal file .dmg, non voglio montarlo.

Nel caso in cui tu sia curioso, ho bisogno di questo per creare un ambiente di sviluppo portatile da utilizzare in officine su computer che non possono essere preparati in anticipo.


1
È un'immagine del disco. A meno che qualcuno non abbia fatto tutto il lavoro (che immagino abbia fatto 7z) per scrivere lettori di file system nel proprio programma, il modo più semplice è usare i moduli del filesystem del kernel Linux per leggere i dati. Il che significa montarlo.
Zan Lynx,

Risposte:


31

Basta usare 7z x.

Nel caso ad esempio del testo Sublime, 7z x "Sublime Text 2.0.2.dmg"sarà sufficiente estrarre tutti i file.

In altri casi, come ad esempio il JDK, devi affrontare una sorta di matrioska.

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

Ma alla fine otterrai una cartella contenente i file che stai cercando.


L'estrazione di file dmg con 7z sembra perdere i bit eseguibili, rendendo disfunzionali le applicazioni estratte dai DMG. Potrebbe essere correlato: sourceforge.net/p/p7zip/bugs/113
Motin


1

Sul Mac, se il dmg è un'immagine di una directory che contiene tutti i file, crea un tgz della directory anziché un dmg e migralo.

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.