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 MobileBackups
Volume 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).
/Volumes/MobileBackups
im AppleScript oben ausgeschlossen werden soll?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.
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
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
Sam
Zach Jung