Alle Netzlaufwerke über Applescript / Automator / Shell auswerfen?


3

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 Volumes wie MobileBackupsauch mehrere andere übersprungen werden .

Leider werden keine Netzwerkfreigaben ausgeworfen.

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 speziell fordere, ist eine Möglichkeit, zu versuchen, jede andere Festplatte als systeminterne Festplatten auszuwerfen, unabhängig von ihrem Namen.


Interessanterweise habe ich etwas fast Identisches zum Auswerfen meiner externen Laufwerke verwendet, und es hat wie ein Zauber gewirkt, bis ich das letzte Mal neu gestartet habe. Jetzt erhalte ich ein Popup mit der Aufschrift, The Disk "32-digit UUID" wasn't ejected because one or more programs may be using it.aber ich kann nicht herausfinden, wem diese UUID entspricht. Es ist beispielsweise in nicht aufgeführt diskutil info -all. Auch in lsof ist nichts verzeichnet. Dies ist auf OSX High Sierra. Irgendwelche Vorschläge?
Victor Engel

Es stellte sich heraus, dass die UUID von Clustern stammte (dem Hintergrundkomprimierungstool). Es erscheint eigentlich nirgendwo als Laufwerk, das ich sehen kann, aber ich habe es endlich in lsof gefunden.
Victor Engel

Antworten:


1

Ich benutze Automator. Ich habe 'Get Specified Finder Items' eingefügt und die Zieldatenträger benannt, die ich 'Get' wollte. Es werden nur die Namen ausgewählt, aber Netzwerklaufwerke funktionieren. Ich leite dies dann zu "Eject Disk".

Das ist es.

Bildbeschreibung hier eingeben


1

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

Damit,

do shell script "/sbin/umount -a -t nfs,smbfs"

sollte alle gemounteten NFS- und Windows / Samba-Freigaben ummounten.

BEARBEITEN: Möglicherweise möchten Sie auch die -fOption verwenden, um die Aktion zu erzwingen. Lesen Sie die Manpage für Details.

EDIT2: Entschuldigung, umount verhält sich nicht wie angekündigt, zumindest auf meinem Snow Leopard. So würde ich es machen, wenn ich daran denke, msdosauf den 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 ​​Dateisystem eine Festplatte gemountet wurde?
Tim Visher

Der mountBefehl zeigt alle gemounteten Dateisysteme an. In der Ausgabe ist das erste Wort nach der Klammer der Dateisystemtyp.
Vic

0

Oder Sie können einfach den Shell-Befehl aufrufen.

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

Beachten Sie, dass dies fehlschlagen kann, wenn Sie geöffnete Dateien haben, die Sie forceals solche hinzufügen können

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

0

Das Befehlszeilendienstprogramm ist /sbin/umountmöglicherweise eine andere 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 ein dort aufgeführtes Laufwerk berechnen:

$ umount /Volumes/Video

Vielleicht möchten Sie ein Shell-Skript erstellen, das den Inhalt von / Volumes auflistet und versucht, alle auszuwerfen.

for var in `ls /Volumes` ; do
echo Ejecting /Volumes/$var
umount /Volumes/$var
done

Es kann jedoch keine Laufwerke auswerfen, die nicht ausgeworfen werden können, wie z. B. die aktuelle Startdiskette.


0

Dadurch werden nur alle Netzwerkvolumes ausgeworfen:

$ find /Volumes -maxdepth 1 -not -user root -print0 | xargs -0 umount

0

Wenn Sie ein AppleScript möchten, habe ich das Skript unter: Verknüpfung angepasst , um alle externen Festplatten, aber nicht MobileBackups, auszuwerfen

dazu, und es funktioniert großartig. Ich habe das Applet dafür in mein Dock gelegt, um es zu verwenden, bevor ich den Stecker aus der Steckdose ziehe.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.