2009-12-22 87 views
14

我正在寻找一种方法来获取挂载磁盘映像的.dmg路径,仅使用挂载点。从挂载点获取.dmg的路径

我想编写一个“简单”的Finder服务,它弹出磁盘映像并破坏伴随的.dmg。弹出是微不足道的,但我不知道如何找出.dmg的路径,只给出挂载点。

diskutil似乎并不知道或不说。

这是一个脚本,所以首选基于AppleScript或shell的建议。

+0

我不认为你会得到一个基于AppleScript或shell的建议,因为你可能不得不与驱动程序或至少它的用户代理对话。 – 2009-12-22 23:43:47

+0

我认为可能有像hdiutil或diskutil这样可以帮助,或者也许在装载磁盘映像上的Finder属性。 – wbg 2009-12-22 23:53:36

回答

15

使用hdiutil info可获取有关当前安装的图像的信息。然后 使用hdiutil detach /Mount/Point卸除所有文件系统,并分离图像。

如果安装了多个图像,则需要解析hdiutil info的输出以找到正确的图像路径。使用plist输出格式hdiutil info -plist可能会更健壮,并将其运行到比如说带有plistlib的python脚本或使用来自System EventsProperty 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 
+0

虽然这不会帮助我清除.dmg。 – wbg 2009-12-22 23:51:26

+0

对不起,错过了这一点。查看更新的答案。 – 2009-12-23 00:04:15

+0

太棒了! hdiutil信息正是我正在寻找的! – wbg 2009-12-23 01:32:08

3

启动终端,执行:

$ cd /Volumes 
$ hdutil info 

的怀疑DMG-文件的位置将显示图像路径

cd下到位置,并做:

$ ls filename 

在Finder中卸载卷,最后在终端:

$ rm filename 

祝你好运。