Uso el siguiente script para intentar expulsar todos los discos que no son internos:
tell application "Finder"
eject (disks whose ejectable is true)
end tell
Esto tiene la ventaja de saltarse volúmenes como MobileBackups
así como varios otros.
Desafortunadamente, no expulsa los recursos compartidos de red.
¿Hay alguna forma de obtener recursos compartidos de red conectados en applescript?
Como +1, idealmente esto también omitiría cosas como los discos ópticos.
EDITAR : Ambas respuestas hasta ahora han compartido formas de expulsar discos de red específicos . Esto, por supuesto, es fácil y sé cómo hacerlo. Lo que pido específicamente es una forma de intentar expulsar todos los discos que no sean los discos internos del sistema, independientemente de su nombre.
Yo uso Automator. Inserté 'Obtener elementos de búsqueda especificados' y nombré los discos de destino que quería 'Obtener'. Solo se eligen los que se nombran, pero las unidades de red funcionan. Luego canalizo esto a 'Expulsar disco'.
Eso es todo.
Se hace fácilmente usando la -t
opción del umount
comando. Desde la página de manual que puedes leer usando man umount
:
-t type
Is used to indicate the actions should only be taken on filesys-
tems of the specified type. More than one type may be specified
in a comma separated list. The list of filesystem types can be
prefixed with ``no'' to specify the filesystem types for which
action should not be taken. For example, the umount command:
umount -a -t nfs,hfs
Entonces,
do shell script "/sbin/umount -a -t nfs,smbfs"
debe desmontar todos los recursos compartidos de NFS y Windows/Samba montados.
EDITAR: También puede usar la -f
opción para forzar la acción. Lea la página man para más detalles.
EDIT2: disculpas, umount no se está comportando como se anuncia, al menos en mi Snow Leopard. Así que lo haría así recordando cambiar msdos
al tipo de sistema de archivos deseado:
set mounts to {}
set mounts to paragraphs of (do shell script "mount | grep msdos | cut -d ' ' -f3")
# Umount non busy filesystems
repeat with mount in mounts
set pid to (do shell script "fuser -c " & mount)
if pid is equal to "" then
# We use diskutil since classic unix umount cmd needs sudo/password
do shell script "diskutil umount " & mount
end if
end repeat
HTH
mount
comando mostrará todos los sistemas de archivos montados. En la salida, la primera palabra después del corchete es el tipo de sistema de archivos.O simplemente puede llamar al comando de shell ...
do shell script "/usr/sbin/diskutil unmount /Volumes/some_network_share"
Tenga en cuenta que esto podría fallar si tiene archivos abiertos para que pueda agregarlos force
como tales
do shell script "/usr/sbin/diskutil unmount force /Volumes/some_network_share"
La utilidad de línea de comandos /sbin/umount
puede ser otra solución para lo que está buscando. Mac OS mantiene un alias para cada uno de sus discos montados en una carpeta /Volumes. Puede usar esto a su favor y acumular una unidad que se enumera allí:
$ umount /Volumes/Video
Por lo tanto, es posible que desee crear un script de shell que enumere los contenidos de /Volumes e intente expulsarlos a todos, como este:
for var in `ls /Volumes` ; do
echo Ejecting /Volumes/$var
umount /Volumes/$var
done
Sin embargo, no podrá expulsar las unidades que no se pueden expulsar, como el disco de inicio actual.
Esto solo expulsará todos los volúmenes de red:
$ find /Volumes -maxdepth 1 -not -user root -print0 | xargs -0 umount
Si desea un AppleScript, adapté el script publicado en: Acceso directo para expulsar todos los discos duros externos pero no MobileBackups
a esto, y funciona muy bien. Coloqué el applet para esto en mi base para usarlo justo antes de desconectarme.
set exceptionsList to {"MobileBackups", "startup disk", "home", "net"}
tell application "Finder"
set diskList to the disks
repeat with mountedDisk in diskList
if name of mountedDisk is not in exceptionsList then
eject mountedDisk
end if
end repeat
end tell
Víctor Engel
The Disk "32-digit UUID" wasn't ejected because one or more programs may be using it.
pero no puedo averiguar a qué corresponde ese UUID. No está en la lista,diskutil info -all
por ejemplo. Además, nada aparece en lsof. Esto está en OSX High Sierra. ¿Alguna sugerencia?Víctor Engel