Alle Netzlaufwerke über Applescript/Automator/Shell auswerfen?

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 MobileBackupsund 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.

Interessanterweise habe ich etwas fast Identisches verwendet, um meine externen Laufwerke auszuwerfen, und es hat wie ein Zauber funktioniert, bis ich das letzte Mal neu gestartet habe. Jetzt erhalte ich ein Popup, das besagt, 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ührt diskutil info -all. In lsof ist auch nichts aufgeführt. Dies ist auf OSX High Sierra. Irgendwelche Vorschläge?
Es stellte sich heraus, dass die UUID von Clusters (dem Komprimierungstool im Hintergrund) stammte. Es erscheint eigentlich nirgendwo als Laufwerk, das ich sehen kann, aber ich habe es schließlich in lsof gefunden.

Antworten (6)

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.

Geben Sie hier die Bildbeschreibung ein

Ganz einfach mit der -tOption des umountBefehls. 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, -fum 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, msdoszu 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

Wie kann ich herausfinden, mit welchem ​​Dateisystemtyp eine Festplatte gemountet wurde?
Der mountBefehl 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 forceals solche hinzufügen können

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

Das Befehlszeilendienstprogramm /sbin/umountist 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