自动获取DMG文件的内容



我有一个Python程序,可以从文件应用或删除多层加密。在这种情况下,我必须打开DMG才能访问里面的ZIP文件。我使用hidutil制作DMG,但我被困在如何打开它和访问文件上 - 我见过的任何方法都依赖于挂载,访问挂载点和卸载,如果不智能地搜索它被安装到的位置,我就无法做到这一点。

我该怎么做?它不一定在Python中,Bash解决方案很好。

您可以使用 7zip 列出和提取 DMG 文件的内容 - 网站在这里。

在macOS上,7zip可以使用以下方法安装自制软件

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 的一个好处是磁盘不会在挂载时突然在桌面上闪烁。

这是一个 bash 版本,它解析 hdiutil 输出以提取用于 zip 文件访问的挂载点和用于之后分离的开发条目:

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

基于这个答案,你可以使用 hdiutil info -plist 通过 Python 获取 dmg 的挂载点。这样,您就可以智能地装载、查找挂载点、列出内容和卸载。

相关内容

  • 没有找到相关文章

最新更新