从挂载点获取.dmg文件的路径

15

我正在寻找一种方法,只通过挂载点获取已挂载磁盘映像的.dmg路径。

我想编写一个“简单”的Finder服务,它将弹出磁盘映像并将其附带的.dmg移到垃圾箱中。弹出操作很简单,但是我不知道如何仅通过挂载点确定.dmg的路径。

diskutil 似乎不知道或不会显示相应信息。

由于这是脚本,因此更倾向于基于AppleScript或shell的建议。


我觉得你不太可能得到一个基于AppleScript或shell的建议,因为你很有可能需要与驱动程序,或者至少是驱动程序的用户代理进行交流。 - Azeem.Butt
我认为可能会有像hdiutil或diskutil这样的工具可以帮助,或者在已挂载的磁盘映像上可能会有Finder属性。 - wbg
2个回答

18

使用 hdiutil info 获取当前已挂载镜像的信息。然后使用 hdiutil detach /Mount/Point 来卸载所有文件系统并分离镜像。

如果有多个镜像被挂载,您需要解析来自 hdiutil info 的输出以找到正确的镜像路径。使用 plist 输出格式 hdiutil info -plist 可能更加稳定,并将其传入 Python 脚本中,例如使用 plistlib 或使用 System Events 中的 Property List Suite 进行 AppleScript。

下面是一个快速而简陋的 Python 脚本,以便您了解。可以使用 Python 解释器轻松地探索选项:

>>> import plistlib
>>> from subprocess import Popen, PIPE
>>> output = Popen(["hdiutil", "info", "-plist"], stdout=PIPE).communicate()[0]
>>> pl = plistlib.readPlistFromString(output)
>>> for image in pl['images']:
...   for se in image['system-entities']:
...       if se.get('mount-point') == '/Volumes/blah':
...          print image['image-path']
/Path/To/blah.dmg

这并不能帮助我删除.dmg文件。 - wbg
太棒了!hdiutil info 正是我正在寻找的! - wbg
@wbg @NedDeily 我正在2019年阅读这篇文章,但无法使建议的解决方案起作用。hdiutil程序是否已更改?当我运行它时,我只能获得有关框架和驱动程序版本的信息。 - Neil Bartlett
@NeilBartlett 你有任何磁盘映像挂载吗?框架/驱动程序信息正常。当有映像挂载时,会有一个额外的 images 数组。 - wbg
@wbg 是的,我挂载了两个镜像。 - Neil Bartlett

4

打开终端,执行以下命令:

$ cd /Volumes
$ hdiutil info

怀疑的 dmg 文件的位置将显示在图片路径下方。 进入该位置并执行以下操作:cd
$ ls filename

在Finder中卸载卷,并最终在终端上执行:

$ rm filename

祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接