Ich verwende das folgende Skript, um zu versuchen, alle Festplatten auszuwerfen, die nicht intern sind:
tell application "Finder"
eject (disks whose ejectable is true)
end tell
Dies hat den Vorteil, dass Bände wie MobileBackups
und einige andere übersprungen werden.
Leider wirft es keine Netzwerkfreigaben aus.
Gibt es eine Möglichkeit, verbundene Netzwerkfreigaben in Applescript zu erhalten?
Als +1 würde dies idealerweise auch Dinge wie optische Datenträger überspringen.
BEARBEITEN : Beide Antworten haben bisher gemeinsame Möglichkeiten zum Auswerfen bestimmter Netzwerkfestplatten. Das ist natürlich einfach und ich weiß, wie es geht. Was ich ausdrücklich verlange, ist eine Möglichkeit, zu versuchen, alle Datenträger außer systeminternen Datenträgern unabhängig von ihrem Namen auszuwerfen.
Ich benutze Automator. Ich fügte „Get Specific Finder Items“ ein und nannte die Zielfestplatten, die ich „Get“ wollte. Nur die benannten werden ausgewählt, aber Netzlaufwerke funktionieren. Ich leite dies dann an 'Eject Disk' weiter.
Das ist es.
Ganz einfach mit der -t
Option des umount
Befehls. Aus der Manpage, die Sie lesen können mit 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
So,
do shell script "/sbin/umount -a -t nfs,smbfs"
sollte alle gemounteten NFS- und Windows/Samba-Freigaben aushängen.
BEARBEITEN: Möglicherweise möchten Sie auch die Option verwenden, -f
um die Aktion zu erzwingen. Lesen Sie die Manpage für Details.
EDIT2: Entschuldigung, umount verhält sich nicht wie angekündigt, zumindest nicht auf meinem Snow Leopard. Ich würde es also so machen und daran denken, msdos
zu Ihrem gewünschten Dateisystemtyp zu wechseln:
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
mount
Befehl zeigt alle gemounteten Dateisysteme an. In der Ausgabe ist das erste Wort nach der Klammer der Dateisystemtyp.Oder Sie könnten einfach den Shell-Befehl aufrufen.
do shell script "/usr/sbin/diskutil unmount /Volumes/some_network_share"
Beachten Sie, dass dies möglicherweise fehlschlägt, wenn Sie Dateien geöffnet haben, die Sie force
als solche hinzufügen können
do shell script "/usr/sbin/diskutil unmount force /Volumes/some_network_share"
Das Befehlszeilendienstprogramm /sbin/umount
ist möglicherweise eine weitere Lösung für das, wonach Sie suchen. Das Mac OS behält einen Alias für jede Ihrer gemounteten Festplatten in einem Ordner /Volumes. Sie können dies zu Ihrem Vorteil nutzen und einen dort aufgeführten Drive ausgeben:
$ umount /Volumes/Video
Vielleicht möchten Sie also ein Shell-Skript erstellen, das den Inhalt von /Volumes auflistet und versucht, sie alle auszuwerfen, wie dieses hier:
for var in `ls /Volumes` ; do
echo Ejecting /Volumes/$var
umount /Volumes/$var
done
Laufwerke, die nicht ausgeworfen werden können, wie die aktuelle Startdiskette, werden jedoch nicht ausgeworfen.
Dadurch werden nur alle Netzwerkvolumes ausgeworfen:
$ find /Volumes -maxdepth 1 -not -user root -print0 | xargs -0 umount
Wenn Sie ein AppleScript möchten, habe ich das Skript angepasst, das unter: Verknüpfung zum Auswerfen aller externen Festplatten, aber nicht von MobileBackups veröffentlicht wurde
dazu, und es funktioniert super. Ich habe das Applet dafür in meinem Dock platziert, um es direkt vor dem Trennen zu verwenden.
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
Viktor Engel
The Disk "32-digit UUID" wasn't ejected because one or more programs may be using it.
aber ich kann nicht herausfinden, welcher UUID entspricht. Es ist z. B. nicht aufgeführtdiskutil info -all
. In lsof ist auch nichts aufgeführt. Dies ist auf OSX High Sierra. Irgendwelche Vorschläge?Viktor Engel