¿Cómo expulsar todas las particiones externas rápidamente?

Tengo un disco externo con dos particiones que mantengo conectado a mi MacBook Pro cuando estoy en mi escritorio. (Uno es para Time Machine, el otro solo para almacenamiento adicional). A veces necesito tomar mi computadora portátil rápidamente y llevarla a algún lado, pero tengo que cambiar a un espacio donde pueda ver las particiones en el escritorio, enlazarlas, dos -haga clic con el dedo y seleccione Eject. ¿Hay una forma más rápida con Mavericks o tengo que configurar un AppleScript como este con un atajo de teclado?

Nota: No busco expulsarlos solo cuando pongo mi Mac en suspensión (como se explora aquí ). A veces estoy en una teleconferencia de pantalla compartida y tengo que quitar mi Mac de mi escritorio por un minuto, si sabes a lo que me refiero :-).

Yo uso Alfred.app para hacer esta tarea. Lo hace tan fácil como presionar <kbd>cmd</kbd>+<kbd>space</kbd>y escribir eject. Muy recomendable
Muchas buenas respuestas a continuación. Me está costando elegir uno como el mejor.
Este lugar no es lo suficientemente grande para nosotros dos, @JimL. Supongo que tendré que irme. (Lo siento, sé que mi comentario es irrelevante, pero vi su nombre en otra publicación y pensé: "¡Yo no escribí eso!" Realmente lo tomé dos veces.

Respuestas (13)

En OS-X Mountain-Lion, puedo hacer clic con la opción de hacer clic en uno de los íconos "Expulsar" (mantener presionada la opción, luego hacer clic en el ícono de expulsión), y todas las particiones externas se expulsarán.

(Actualización) Se ha verificado que esto también funciona en OS X Mavericks e incluso en macOS Sierra, como sospeché que lo haría. Probablemente se puede suponer que funciona en al menos todas las versiones intermedias (¡pruébelo!).

Esto todavía funciona bajo Mavericks.
Esta resulta ser la respuesta más satisfactoria para mí. Un acorde rápido y listo. No se necesita software adicional. ¡Gracias!
Parece que ya no funciona en El Capitán. ¿Alguien puede confirmar?
¡@Matteo todavía funciona para mí!

La única advertencia para "expulsar rápidamente" los discos con alguna confiabilidad es que no se expulsarán si hay archivos en uso que residen en ellos. Dicho esto, puede forzar la expulsión de discos, pero eso no sería ideal si los archivos están, de hecho, en uso.

La forma más fácil de expulsar instantáneamente todos los discos es invocando un Applescript (también podría crear un script de shell, pero Applescript se convierte más fácilmente en una solución de aplicación con un solo clic).

Así que ve a tu Applescript Editor, pega lo siguiente:

tell application "Finder" to eject (every disk whose ejectable is true and local volume is true and free space is not equal to 0)

Ingrese el código en su editor de secuencias de comandos

y guarde el script como una aplicación donde elija (NO use la /tmpcarpeta como se ilustra) . Agregue la aplicación resultante a su Dock y tendrá una Expulsión rápida con un solo clic.

Seleccione 'Aplicación' como su formato de archivo

Nota: la and free space is not equal to 0parte es para que el script no expulse el contenido de su unidad de CD/DVD. Elimínelo si desea que también se expulsen los discos insertados.

He envuelto esto en un script de Ruby en mi respuesta aquí... más o menos lo mismo otra vez...
Puse este Applescript para ejecutar en un servicio y luego creé un atajo de teclado en las Preferencias del Sistema y funciona perfectamente.
Esta es mi respuesta favorita porque usa cosas nativas de MacOS. Sin embargo, en realidad no aborda la necesidad de desconectar físicamente rápidamente las unidades externas. "Tengo que quitar mi Mac de mi escritorio por un minuto". Por lo tanto, si la secuencia de comandos solo expulsa las unidades extraíbles y algunas no lo eran en ese momento, ¡sería genial que nos advirtieran antes de quitar el cable y dirigirnos a otra habitación!

Recomiendo a Alfredo . Es una aplicación de lanzamiento rápido que incluye la función de expulsar volúmenes. Puede seleccionar qué tipo de objetivos califican para el comando (unidad de red, local, etc.).

comando de expulsión de alfredo

Cuando activa el atajo, puede seleccionar un volumen específico para desmontarlo. O puede escribir ejectall (este nombre de acceso directo es personalizable).

Nota: deberá habilitar estos comandos incorporados de Alfred yendo a Preferencias de Alfred -> Sistema -> Expulsar y Preferencias -> Sistema -> "Expulsar todo" alfredapp.com/help/features/system

Uso la barra de inicio para automatizar esta tarea. Tiene un atajo de comando para expulsar todos los volúmenes expulsables. Es increíblemente rápido y si desactiva la mayoría de las reglas de indexación, la huella de memoria y el uso de la CPU pueden ser mínimos.

Es mucho más poderoso que este truco, pero lo hace muy bien y probablemente estaría bien usando la versión gratuita para ese propósito, ya que solo estaría usando ese atajo.

Si tiene la misma configuración cada vez que desea expulsar varios discos externos a la vez, puede usar AppleScript / Automater y crear su propio atajo de teclado. Hay una descripción detallada de cómo hacer esto aquí: https://superuser.com/questions/405330/global-keyboard-shortcut-to-eject-external-hard-drive-on-mac-osx-lion

Puede usar la aplicación de la barra de menú Ejector http://www.macupdate.com/app/mac/12216/ejector para expulsar todos los volúmenes expulsables. La única parte lamentable para mí es que no puedo expulsarlos sin iniciar sesión.

Personalmente, estoy usando Alfred como se sugiere en otra respuesta. Pero aquí está la respuesta de Applescript , envuelta en un script de Ruby.

#!/usr/bin/env ruby
#eject-all shell script

# Dan Rosenstark 2015-11-12 15:28
# http://porkrind.org/missives/calling-applescript-from-ruby/
def osascript(script)
  system 'osascript', *script.split(/\n/).map { |line| ['-e', line] }.flatten
end

if __FILE__ == $0
  appleScript = "tell application \"Finder\" to eject (every disk whose ejectable is true and local volume is true and free space is not equal to 0)";
  osascript appleScript
  puts "I probably ejected all the disks."
end

tendrás que ponerlo en tu camino y hacerlo ejecutable.

Los AppleScripts anteriores expulsan todos los discos expulsables, lamentablemente esto también incluye discos en la nube como Box.com/Google Drive, etc.

Para expulsar solo los discos que no están en la nube, modifiqué ligeramente el script para:

tell application "Finder" to eject (every disk whose ejectable is true and local volume is true and format is not unknown format) 

Espero que esto ayude a cualquiera que venga aquí en busca de esto.

Esto se puede hacer de manera elegante con una aplicación de automatización y utilizando la función de notificación de visualización para la salida. Simplemente guarde lo siguiente como una aplicación y ejecútela como prefiera.

ingrese la descripción de la imagen aquí

Yo uso una combinación de AppleScript y una aplicación llamada Spark . Spark está en Github para Homebrew Casks.

brew install Caskroom/cask/spark

Luego solo uso un AppleScript para expulsar las unidades y vincularlas al acceso directo ⌘ E.

ingrese la descripción de la imagen aquí

Para discos con particiones, he encontrado que el siguiente Applescript funciona mejor.

tell application "System Events"
  key down option
  tell application "Finder"
    with timeout of 15 seconds -- make sure we stop
      eject (every disk whose ejectable is true)
    end timeout
  end tell
  key up option
end tell

Mejorando la respuesta de Ady, noté que su versión incluiría mis discos de Time Machine.

Ejemplo: disco "2022-09-07-113224.backup" de la aplicación "Finder"

No quiero expulsar estos. Agregar que el propietario no es "sistema" filtró esos discos para mí. Así que uso esto para expulsar en su lugar.

tell application "Finder"
    eject (every disk whose ejectable is true and local volume is true and format is not unknown format and owner is not "system")
end tell

Puede probar qué discos se expulsarán en el Editor de secuencias de comandos ejecutando

tell application "Finder"
    every disk whose ejectable is true and local volume is true and format is not unknown format and owner is not "system"
end tell

Aquí hay una respuesta de script más larga que podría ser más confiable. Filtran los discos de TimeMachine inspeccionando el nombre. Acceso directo para expulsar todos los discos duros externos pero no MobileBackups

En macOS Mojave, simplemente puede seleccionar las dos unidades que desea expulsar y hacer clic en "CMD+E". Esto expulsará ambos discos sin ningún aviso.

¡Eso es exactamente lo que la pregunta original buscaba evitar!