¿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 MobileBackups, así como muchos otros.

Desafortunadamente, no expulsa los recursos compartidos de red.

¿Hay alguna manera de conectar recursos compartidos de red en AppleScript?

Como un +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 discos internos del sistema, independientemente de su nombre.

Tim Visher
fuente
Curiosamente, he estado usando algo casi idéntico a esto para expulsar mis unidades externas, y ha funcionado de maravilla hasta después de la última vez que reinicié. Ahora aparece una ventana emergente que dice, The Disk "32-digit UUID" wasn't ejected because one or more programs may be using it.pero no puedo entender a qué corresponde ese UUID. No está en la lista, diskutil info -allpor ejemplo. Además, nada figura en lsof. Esto está en OSX High Sierra. ¿Alguna sugerencia?
Victor Engel
Resulta que el UUID era de Clusters (la herramienta de compresión de fondo). En realidad, no aparece como un disco en cualquier lugar que pueda ver, pero finalmente lo encontré en lsof.
Victor Engel

Respuestas:

1

Yo uso Automator. Inserté 'Obtener elementos del buscador especificados' y llamé a los discos de destino que quería 'Obtener'. Solo se eligen los nombrados, pero las unidades de red funcionan. Luego canalizo esto a 'Eject Disk'.

Eso es.

ingrese la descripción de la imagen aquí

cmason
fuente
1

Fácilmente hecho usando la -topción del umountcomando. Desde la página de 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 NFS y Windows / Samba montados.

EDITAR: También puede utilizar la -fopción para forzar la acción. Lea la página del manual para más detalles.

EDIT2: Disculpas, umount no se comporta como se anuncia, al menos en mi Snow Leopard. Entonces lo haría así recordando cambiar msdosal 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

Vic
fuente
¿Cómo puedo saber con qué tipo de sistema de archivos se montó un disco?
Tim Visher
El mountcomando mostrará todos los sistemas de archivos montados. En la salida, la primera palabra después del paréntesis es el tipo de sistema de archivos.
Vic
0

O simplemente puede llamar al comando de shell ...

do shell script "/usr/sbin/diskutil unmount /Volumes/some_network_share"

Tenga en cuenta que esto puede fallar si tiene archivos abiertos para que pueda agregarlos forcecomo tales

do shell script "/usr/sbin/diskutil unmount force /Volumes/some_network_share"
SaxDaddy
fuente
0

La utilidad de línea de comandos /sbin/umountpuede 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 calcular la cantidad de unidades que se enumeran 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 unidades que no se pueden expulsar, como el disco de inicio actual.

Adán
fuente
0

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

$ find /Volumes -maxdepth 1 -not -user root -print0 | xargs -0 umount
grg
fuente
0

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. He colocado el applet para esto en mi base para usarlo antes de desconectarlo.

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
Neil Ticktin
fuente