¿Expulsando todas las unidades de red a través de Applescript / Automator / Shell?

3

Utilizo 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 omitir volúmenes como MobileBackups así como varios otros.

Lamentablemente, no expulsa recursos compartidos de red.

¿Hay alguna forma de conectar los recursos compartidos de red en Applecript?

Como un +1, idealmente, esto también saltearía cosas como discos ópticos.

EDIT : hasta ahora, ambas respuestas tienen formas compartidas de expulsar discos de red específicos . Esto, por supuesto, es fácil y sé cómo hacerlo. Lo que solicito específicamente es una forma de intentar expulsar todos los discos que no sean los discos internos del sistema, independientemente de su nombre.

    
pregunta Tim Visher 28.04.2014 - 21:49

6 respuestas

1

Yo uso Automator. Inserté 'Obtener elementos del buscador especificados' y nombré los discos de destino que quería 'Obtener'. Solo los nombrados son elegidos, pero las unidades de red funcionan. Entonces canalizo esto a 'Expulsar disco'.

Eso es todo.

    
respondido por el cmason 28.04.2014 - 22:42
1

Se hace fácilmente usando la opción -t del comando umount . De la página del manual que puede 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 opción -f para forzar la acción. Lee la página del manual para más detalles.

EDIT2: Disculpas, umount no se comporta 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

    
respondido por el Vic 30.04.2014 - 20:37
0

O simplemente puedes 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, por lo que puede agregar force como tal

do shell script "/usr/sbin/diskutil unmount force /Volumes/some_network_share"
    
respondido por el SaxDaddy 29.04.2014 - 02:51
0

La utilidad de línea de comando /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 / Volúmenes. Puede usar esto para su ventaja y para la cantidad de unidades que se enumeran allí:

$ umount /Volumes/Video

Por lo tanto, es posible que desee crear un script de shell que incluya 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 unidades que no puedan ser expulsadas, como el disco de inicio actual.

    
respondido por el Adam 29.04.2014 - 05:02
0

Esto solo expulsará todos los volúmenes de red:

$ find /Volumes -maxdepth 1 -not -user root -print0 | xargs -0 umount
    
respondido por el grg 29.04.2014 - 07:52
0

Si desea un AppleScript, adapté el script publicado en: Acceso directo para expulsar todos los discos duros externos pero no MobileBackups

para esto, y funciona muy bien. He colocado el applet para que lo use en mi dock justo antes de que lo desconecte.

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
    
respondido por el Neil Ticktin 04.01.2015 - 18:47

Lea otras preguntas en las etiquetas