2

外部ハードドライブ用のカスタム ファイル/チェックイン チェックアウト スクリプトを作成しようとしていますが、スクリプトの一部は Linux マシンからのもので、正常に動作することをテストしましたが、udevinfoを使用し、OS X には 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 でこれを実現する方法はありますか?

4

2 に答える 2

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])    
于 2010-04-08T19:45:57.013 に答える
1

IOKit はデバイスを管理し、DiskArbitration はその上に大容量ストレージ デバイスを管理します。どちらも、スクリプト インターフェイスの邪魔になるものはあまりありません。

于 2010-04-08T16:40:34.337 に答える