4 votos

Acceso directo para expulsar todos los discos duros externos pero no MobileBackups

Hasta ahora he estado usando el siguiente AppleScript para expulsar todas las unidades externas a la vez convenientemente usando un acceso directo:

tell application "Finder"
    eject (every disk)
end tell

Este script se almacena en /Library/Scripts y he asignado un acceso directo para activarlo en FastScripts .

Pero hay un problema. Cuando tienes Copias de seguridad de Time Machine habilitado, OS X monta un MobileBackups volumen en /Volumes para almacenar instantáneas locales . Este volumen será expulsado junto con todos los volúmenes físicos externos. Quiero evitar esto ya que esto detendrá la realización de instantáneas locales (hasta que se monte de nuevo en el siguiente inicio de sesión).

¿Cómo puedo añadir una excepción para excluir /Volumes/MobileBackups en el AppleScript anterior?

4voto

Dickster Puntos 6

Puedes hacer lo siguiente en su lugar:

tell application "Finder"
  eject (every disk whose ejectable is true)
end tell

Si tiene montados discos con particiones, mantenga pulsada la tecla "Opción", ejecute su script, y suelte la tecla cuando termine.

0 votos

¿Hay alguna manera de mostrar una notificación cuando los discos han sido expulsados con éxito?

0 votos

Gracias, he incorporado su lógica en mi solución a continuación.

3voto

Phill Puntos 126

Este código AppleScript:

tell application "Finder"
    set diskList to the disks
    repeat with mountedDisk in diskList
        if name of mountedDisk is not "MobileBackups" then
            eject mountedDisk
        end if
    end repeat
end tell

expulsa todos los discos montados excepto cuando se nombran MobileBackups Es decir, /Volumes/MobileBackups .

2voto

Neil Ticktin Puntos 11

He modificado ligeramente esto para hacer las exclusiones como un conjunto.

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

0 votos

Gracias, he incorporado su lógica en mi solución a continuación.

0voto

Zach Young Puntos 101

Juntando las soluciones de Neil Ticktin y Dickster:

tell application "Finder"
    set diskList to the disks whose ejectable is true
    repeat with mountedDisk in diskList
        set mountedDiskName to the name of mountedDisk

        set skip to my skipDisk(mountedDiskName)
        if skip is false then
            eject mountedDisk
            log "ejected " & mountedDiskName
        else
            log skip
        end if

    end repeat
end tell

-- skipDisk is either `false` or a string explaining what was skipped and why
on skipDisk(diskName)
    set exceptionsList to {"TimeMachine", ".backup"}

    if diskName is in exceptionsList then
        return "skipped: \"" & diskName & "\" is in `exceptionsList`"
    end if

    repeat with exceptionDiskName in exceptionsList
        if diskName contains exceptionDiskName then
            return "skipped: \"" & diskName & "\" contains \"" & exceptionDiskName & "\""
        end if
    end repeat

    return false
end skipDisk

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