3 votos

¿Expulsar todas las unidades de red mediante Applescript/Automator/Shell?

Uso el siguiente script para intentar expulsar todos los discos que no sean 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.

Por desgracia, no expulsa los recursos compartidos de red.

¿Hay alguna forma de obtener los recursos compartidos de red conectados en applescript?

Como +1, lo ideal sería que esto también omitiera cosas como los discos ópticos.

EDITAR : Las dos respuestas hasta ahora han compartido formas de expulsión específico discos de red. Esto, por supuesto, es fácil y sé cómo hacerlo. Lo que estoy pidiendo específicamente es una manera de intentar expulsar todos los discos que no sean discos internos del sistema, independientemente de su nombre.

2voto

cmason Puntos 1680

Yo uso Automator. Introduje 'Get Specified Finder Items', y nombré los discos de destino que quería 'Get'. Sólo los nombrados son elegidos, pero las unidades de red funcionan. Luego lo canalizo a "Expulsar disco".

Eso es todo.

enter image description here

1voto

SPRBRN Puntos 1008

Se puede hacer fácilmente utilizando el -t opción del umount comando. Desde la página de manual que puede leer utilizando 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

Así que,

do shell script "/sbin/umount -a -t nfs,smbfs"

debe desmontar todos los recursos compartidos NFS y Windows/Samba montados.

EDIT: También es posible que desee utilizar el -f para forzar la acción. Lea la página de 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 a su 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

0voto

SaxDaddy Puntos 153

O simplemente podrías llamar al comando de la 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 añadir force como tal

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

0voto

tanveer malik Puntos 1

La utilidad de la línea de comandos /sbin/umount puede ser otra solución a lo que buscas. El Mac OS mantiene un alias para cada uno de sus discos montados en una carpeta /Volumes. Usted puede utilizar esto para su ventaja y la cantidad de una unidad que aparece allí:

$ umount /Volumes/Video

Así que podrías crear un shell script que liste el contenido de /Volumes e intente expulsarlos todos, como este:

for var in `ls /Volumes` ; do
echo Ejecting /Volumes/$var
umount /Volumes/$var
done

Sin embargo, fallará al expulsar unidades que no pueden ser expulsadas, como el disco de inicio actual.

0voto

siva Puntos 23

Esto sólo expulsará todos los volúmenes de red:

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X