Verknüpfung zum Auswerfen aller externen Festplatten, aber nicht von MobileBackups

Bisher habe ich das folgende AppleScript verwendet, um alle externen Laufwerke auf einmal bequem über eine Verknüpfung auszuwerfen:

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

Dieses Skript ist in gespeichert und ich habe eine Verknüpfung zugewiesen, um es in FastScripts/Library/Scripts auszulösen .

Aber es gibt ein Problem. Wenn Sie Time Machine Backups aktiviert haben, stellt OS X ein virtuelles MobileBackupsVolume bereit, um lokale Snapshots/Volumes zu speichern . Dieses Volume wird zusammen mit allen physischen externen Volumes ausgeworfen. Ich möchte dies vermeiden, da dies verhindert, dass lokale Snapshots erstellt werden (bis es bei der nächsten Anmeldung wieder gemountet wird).

Wie kann ich eine Ausnahme hinzufügen, die /Volumes/MobileBackupsim AppleScript oben ausgeschlossen werden soll?

Antworten (5)

Dieser AppleScript-Code:

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

wirft alle gemounteten Festplatten aus, außer wenn sie benannt sind MobileBackups, also /Volumes/MobileBackups.

Sie können stattdessen Folgendes tun:

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

Wenn Sie partitionierte Festplatten gemountet haben, halten Sie die „Option“-Taste gedrückt, führen Sie Ihr Skript aus und lassen Sie die Taste los, wenn Sie fertig sind.

Gibt es eine Möglichkeit, eine Benachrichtigung anzuzeigen, wenn Datenträger erfolgreich ausgeworfen wurden?
Danke, ich habe Ihre Logik in meine Lösung unten eingebaut.

Ich habe dies leicht modifiziert, um Ausschlüsse als Satz auszuführen.

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
Danke, ich habe Ihre Logik in meine Lösung unten eingebaut.

Zusammenfassen der Lösungen von Neil Ticktin und 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

Inspiriert von Adys Antwort in diesem Beitrag , hier ist eine einfachere Version, die für mich funktioniert hat.

Ich filtere die TimeMachine-Sicherungen ( Beispiel: Festplatte „2022-09-07-113224.backup“ ) heraus, indem ich root-eigene Volumes herausfiltere. Zachs Ansatz ist jedoch viel sicherer, indem er die Namen überprüft.

Hier ist, was für mich funktioniert.

tell application "Finder"
    eject (every disk whose ejectable is true and local volume is true and format is not unknown format and owner is not "system")
end tell

Sie können testen, welche Datenträger im Skripteditor ausgeworfen werden, indem Sie ausführen

tell application "Finder"
    every disk whose ejectable is true and local volume is true and format is not unknown format and owner is not "system"
end tell