Skip to main content
2 of 4
added 131 characters in body
emonigma
  • 1.1k
  • 1
  • 10
  • 25

You can use the in-built AppleScript solution, as mentioned in this thread and this page, by adding this to ~/.bash_profile:

alias ejectall='osascript -e "tell application \"Finder\" to eject (every disk whose ejectable is true)"'

This will require you giving permission to Terminal to control Finder, or you will get this error:

execution error: Not authorised to send Apple events to Finder. (-1743)

If you want a pure bash solution, here is a function that you can call with ejectall. If you renamed your startup disk or have Time Machine Mobile Backups, you may need to edit the condition that filters out the drives.

ejectall() {
    total=0
    ejected=0
    
    for v in /Volumes/*; do
      if [[ $v != *"Macintosh HD" ]]; then
          echo "Ejecting $v..."
          diskutil eject "$v"
          
          if [ $? -eq 0 ]; then
            ejected=$(($ejected + 1))
          fi
          total=$(($total + 1))
      fi
    done
    
    if [ $total -eq 0 ]; then
      echo "No drives to eject"
    else
      msg="$ejected drive(s) ejected"
      failed=$(($total - $ejected))
      if [ $failed -gt 0 ]; then
          msg="$msg, $failed drive(s) failed to eject"
      fi
      echo $msg
    fi
}

Both methods will also work for CDs.

emonigma
  • 1.1k
  • 1
  • 10
  • 25