2010-04-08 3 views
2

외부 하드 리브 (hardrives)를위한 체크 아웃 스크립트를 사용자 정의 파일로 만들려고합니다. 그러나 스크립트의 일부는 잘 작동하지만 테스트를 거친 리눅스 컴퓨터에서 가져 왔습니다. 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[@]}" 

아무 대안이 있습니까? 또는 bash를 사용하여 OSX에서이를 수행 할 수있는 방법은 무엇입니까?

+0

나는 discutil을 사용하여 해결 방법을 찾았지만 아무에게도 제안이 있다면 열려 있다고 생각합니다. – S1syphus

+0

이미 제출 된 답변이 아닌 이유를 설명하면 더 만족스러운 답변을 얻을 수 있습니다. –

답변

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은 그 위에 대용량 저장 장치를 관리합니다. 어느 쪽도 스크립팅 인터페이스의 방식을 많이 갖고 있지 않습니다.