Comment extraire un fichier .dmg sous Linux?

19

En tant qu'utilisateur Linux, j'ai besoin d'obtenir le contenu d'un fichier .dmg (image disque Mac OSX) qui contient un programme d'installation d'application.

J'ai essayé dmg2dir(ce qui nécessite dmg2img) qui a créé un fichier .img mais rien d'autre.

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

J'ai juste besoin de décompresser les fichiers du fichier .dmg, je ne veux pas le monter.

Si vous êtes curieux, j'en ai besoin pour créer un environnement de développement portable à utiliser dans des ateliers sur des ordinateurs qui ne peuvent pas être préparés à l'avance.

qubodup
la source
1
Il s'agit d'une image disque. À moins que quelqu'un n'ait fait tout le travail (que je suppose que 7z a fait) pour écrire des lecteurs de système de fichiers dans leur programme, la façon la plus simple est d'utiliser les modules du système de fichiers du noyau Linux pour lire les données. Ce qui signifie le monter.
Zan Lynx

Réponses:

31

Utilisez simplement 7z x.

Dans le cas par exemple du texte Sublime, 7z x "Sublime Text 2.0.2.dmg"suffira pour extraire tous les fichiers.

Dans d'autres cas, comme par exemple le JDK, vous devez faire face à une sorte de matriochka.

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

Mais vous obtiendrez finalement un dossier contenant les fichiers que vous recherchez.

qubodup
la source
L'extraction de fichiers dmg avec 7z semble manquer les bits exécutables, ce qui rend les applications extraites des DMG dysfonctionnelles. Peut être lié: sourceforge.net/p/p7zip/bugs/113
Motin
1

Sur le Mac, si le dmg est une image d'un répertoire contenant tous les fichiers, faites un tgz du répertoire au lieu d'un dmg et migrez-le.

#!/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
Dick.Guertin
la source