2010-04-08 42 views
2

我試圖創建一個自定義文件/簽入檢出腳本的外部硬件,但是腳本的一部分來自Linux機器,我測試過的工作正常,但使用udevinfo,OS X沒有udev,那麼是否有任何提供相同功能的東西?OSX上的udev功能的替代

#!/bin/bash 
declare -a EXTERNAL_DISKS 
declare -a INTERNAL_DISKS 

for disk in /dev/[sh]d[a-z]; do 
    eval `udevinfo -q env -n $disk` 
    [ "$ID_BUS" = "usb" ] && EXTERNAL_DISKS=(${EXTERNAL_DISKS[@]} $disk) 
    [ "$ID_BUS" = "scsi" ] && INTERNAL_DISKS=(${INTERNAL_DISKS[@]} $disk) 
done 

echo "Internal disks: ${INTERNAL_DISKS[@]}" 
echo "External disks: ${EXTERNAL_DISKS[@]}" 

有人知道任何替代方案嗎?或者這種方式可以在OSX上使用bash來完成?

+0

我想我已經找到了使用diskutil的解決方法,但如果有人有任何建議,我向他們開放。 – S1syphus 2010-04-08 14:58:13

+0

如果你解釋爲什麼已經提交的答案不是,你很可能會得到更滿意的答案。 – 2010-04-08 22:44:09

回答

4
#!/usr/bin/env python 
from plistlib import readPlistFromString as rPFS 
from subprocess import * 

def shell(cmd): 
    return Popen(cmd.split(), stdout=PIPE).communicate()[0] 

disks = {False: [], True: []} 
for disk in rPFS(shell('diskutil list -plist'))['WholeDisks']: 
    disks[rPFS(shell('diskutil info -plist ' + disk))['Internal']].append(disk) 

print "Internal disks: " + ' '.join(disks[True])  
print "External disks: " + ' '.join(disks[False])  
1

IOKit管理設備,DiskArbitration管理設備上的大容量存儲設備。腳本界面的方式也不多。