Bagaimana cara mengekstrak file .dmg di Linux?

19

Sebagai pengguna Linux, saya perlu mendapatkan konten file .dmg (gambar disk Mac OSX) yang berisi penginstal aplikasi.

Saya mencoba dmg2dir(yang mengharuskan dmg2img) yang membuat file .img tetapi tidak ada yang lain.

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

Saya hanya perlu file dari file .dmg dibongkar, saya tidak ingin me-mount itu.

Jika Anda penasaran, saya perlu ini untuk menciptakan lingkungan pengembangan portabel untuk digunakan di bengkel komputer yang tidak dapat disiapkan sebelumnya.

qubodup
sumber
1
Ini adalah gambar disk. Kecuali seseorang telah melakukan semua pekerjaan (yang saya kira 7z lakukan) untuk menulis pembaca sistem file ke dalam program mereka, cara termudah adalah dengan menggunakan modul sistem file kernel Linux untuk membaca data. Yang berarti memasangnya.
Zan Lynx

Jawaban:

31

Gunakan saja 7z x.

Dalam hal misalnya teks Sublime, 7z x "Sublime Text 2.0.2.dmg"akan cukup untuk mengekstrak semua file.

Dalam kasus lain, seperti misalnya JDK, Anda harus berurusan dengan beberapa jenis matryoshka.

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

Namun pada akhirnya Anda akan mendapatkan folder yang berisi file yang Anda cari.

qubodup
sumber
Mengekstrak file dmg dengan 7z tampaknya melewatkan bit yang dapat dieksekusi, membuat aplikasi yang diekstrak dari DMG menjadi tidak berfungsi. Mungkin terkait: sourceforge.net/p/p7zip/bugs/113
Motin
1

Di Mac, jika dmg adalah gambar direktori yang berisi semua file, maka buatlah tgz dari direktori alih-alih dmg, dan migrasikan.

#!/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
sumber