2010-04-08 43 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管理设备上的大容量存储设备。脚本界面的方式也不多。