在 OS X 上卸载所有外部驱动器的命令行

xan*_*291 1 macos shell disk

我正在尝试编写一个 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)