我正在尝试编写一个 shell 脚本来卸载/挂载 OS X 上的所有外部驱动器。
我的磁盘列表如下:
$ diskutil list
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_CoreStorage 499.4 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk1
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS Macintosh HD *496.3 GB disk1
Logical Volume on disk0s2
AE949253-803C-49DC-93EA-7DFC74C2EAA2
Unencrypted
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS Time Machine 999.9 GB disk2s2
/dev/disk3
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *750.2 GB disk3
1: EFI EFI 209.7 MB disk3s1
2: Microsoft Basic Data USB HD 4 749.9 GB disk3s2
/dev/disk4
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.1 GB disk4
1: EFI EFI 209.7 MB disk4s1
2: Microsoft Basic Data Backup 499.9 GB disk4s2
/dev/disk5
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk5
1: EFI EFI 209.7 MB disk5s1
2: Apple_HFS USB HD 1 999.9 GB disk5s2
/dev/disk6
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *4.0 TB disk6
1: EFI EFI 209.7 MB disk6s1
2: Apple_HFS USB HD 2 4.0 TB disk6s2
/dev/disk8
#: TYPE NAME SIZE IDENTIFIER
0: Apple_partition_scheme *122.9 GB disk8
1: Apple_partition_map 32.3 KB disk8s1
2: Apple_Driver43 28.7 KB disk8s2
3: Apple_Driver43 28.7 KB disk8s3
4: Apple_Driver_ATA 28.7 KB disk8s4
5: Apple_Driver_ATA 28.7 KB disk8s5
6: Apple_FWDriver 262.1 KB disk8s6
7: Apple_Driver_IOKit 262.1 KB disk8s7
8: Apple_Patches 262.1 KB disk8s8
9: Apple_HFS Windows 122.9 GB disk8s9
Run Code Online (Sandbox Code Playgroud)
所以,我写了一个脚本,如:
#!/bin/sh
diskutil list | grep -oE 'disk[0-9]s2' | while read i
do
Prtl=`diskutil info ${i} | grep Protocol | cut -d ' ' -f 21`
if [ ${Prtl} = USB ]; then
diskutil unmount ${i}
fi
done
Run Code Online (Sandbox Code Playgroud)
我想知道以下几点:
1.有没有办法不使用diskutil信息来识别外部驱动器?原因是 diskutil info 启动睡眠驱动器,我的脚本很慢。
2.有没有更聪明的方法?我在谷歌上搜索了很多,但我找不到我想要的方式。希望能帮到我...
小智 5
不会解决硬盘驱动器旋转延迟的问题,但您也可以编写:
find /dev -name "disk[1-9]" -exec diskutil eject {} \;
Run Code Online (Sandbox Code Playgroud)
或者,这个脚本对我来说效果很好:
osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'
Run Code Online (Sandbox Code Playgroud)