我有一个Python程序,可以从文件中应用或删除多层加密。在这种情况下,我必须打开一个DMG来访问里面的ZIP文件。我使用hidutil
来制作DMG,但我仍然坚持如何打开它并访问文件 - 我所见过的任何方法都依赖于安装,访问挂载点和卸载,我不能没有聪明地搜索它的安装位置。
我该怎么做?它不一定是在Python中,Bash解决方案很好。
答案 0 :(得分:1)
基于this answer,您可以使用hdiutil info -plist
通过Python获取dmg的挂载点。这样您就可以安装,查找安装点,列出内容并智能地卸载。
答案 1 :(得分:1)
您可以使用 7zip 列出并提取DMG文件的内容 - 网站为here。
在macOS上, 7zip 可以使用 homebrew 安装:
brew install p7zip
然后,如果您有DMG文件,则可以使用以下内容列出内容:
7z l SomeDisk.dmg
示例输出
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,8 CPUs x64)
...
...
Modified = 2018-01-14 13:28:17
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2018-01-14 13:28:16 D.... MyFunkyDMG
2018-01-14 13:28:16 D.... MyFunkyDMG/.HFS+ Private Directory Data
2018-01-14 13:28:17 ..... 524288 524288 MyFunkyDMG/.journal
2018-01-14 13:28:16 ..... 4096 4096 MyFunkyDMG/.journal_info_block
2017-08-27 13:50:45 ..... 255 4096 MyFunkyDMG/client.py
2017-08-27 13:49:22 ..... 356 4096 MyFunkyDMG/server.py
2018-01-14 13:28:16 D.... MyFunkyDMG/[HFS+ Private Data]
------------------- ----- ------------ ------------ ------------------------
2018-01-14 13:28:17 528995 536576 4 files, 3 folders
然后你可以使用:
提取一个名为FRED
的新目录
7z x -oFRED SomeDisk.dmg
使用 7zip 的一个好处是,在安装桌面时,磁盘不会突然闪现。
答案 2 :(得分:1)
这是一个bash版本,它解析hdiutil输出以提取zip文件访问的挂载点,然后解压缩dev条目:
#!/bin/bash
dmg_path="$1"
# use process redirection to capture the mount point and dev entry
IFS=$'\n' read -rd '\n' mount_point dev_entry < <(
# mount the diskimage; leave out -readonly if making changes to the filesystem
hdiutil attach -readonly -plist "$dmg_path" | \
# convert output plist to json
plutil -convert json - -o - | \
# extract mount point and dev entry
jq -r '
.[] | .[] |
select(."volume-kind" == "hfs") |
."mount-point" + "\n" + ."dev-entry"
'
)
# work with the zip file
ls "$mount_point/*.zip"
# unmount the disk image
hdiutil detach "$dev_entry"