Espellere tutte le unità di rete tramite Applescript / Automator / Shell?

3

Uso il seguente script per tentare di espellere tutti i dischi che non sono interni:

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

Questo ha il vantaggio di saltare volumi come MobileBackups e molti altri.

Purtroppo, non espelle le condivisioni di rete.

C'è un modo per ottenere condivisioni di rete connesse in applescript?

Come +1, idealmente questo salta anche cose come i dischi ottici.

EDIT : entrambe le risposte finora hanno condiviso i modi per espellere i dischi di rete specifici . Questo, ovviamente, è facile e so come farlo. Quello che sto chiedendo in particolare è un modo per tentare di espellere ogni disco diverso dai dischi interni del sistema, indipendentemente dal loro nome.

    
posta Tim Visher 28.04.2014 - 21:49
fonte

6 risposte

1

Uso Automator. Ho inserito "Get Specified Finder Items" e ho chiamato i dischi di destinazione che volevo "Get". Solo quelli nominati vengono scelti, ma le unità di rete funzionano. Lo metto quindi su "Rimuovi disco".

Questo è tutto.

    
risposta data 28.04.2014 - 22:42
fonte
1

Facilmente fatto usando l'opzione -t del comando umount . Dalla pagina man che puoi leggere usando 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

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

dovrebbe smontare tutte le condivisioni NFS e Windows / Samba montate.

EDIT: potresti anche voler usare l'opzione -f per forzare l'azione. Leggi la pagina man per i dettagli.

EDIT2: Ci scusiamo, umount non si comporta come pubblicizzato, almeno sul mio Snow Leopard. Quindi farei così ricordando di cambiare msdos al tipo di filesystem desiderato:

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

    
risposta data 30.04.2014 - 20:37
fonte
0

Oppure puoi semplicemente chiamare il comando shell ..

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

Tieni presente che ciò potrebbe non riuscire se disponi di file aperti, quindi puoi aggiungere force come tale

do shell script "/usr/sbin/diskutil unmount force /Volumes/some_network_share"
    
risposta data 29.04.2014 - 02:51
fonte
0

L'utilità della riga di comando /sbin/umount potrebbe essere un'altra soluzione a ciò che stai cercando. Mac OS mantiene un alias su ciascuno dei dischi montati in una cartella / volumi. Puoi utilizzarlo a tuo vantaggio e sommare un'unità elencata qui:

$ umount /Volumes/Video

Quindi potresti voler creare uno script di shell che elenchi i contenuti di / Volumes e tenti di espellerli tutti, come questo:

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

Tuttavia, non riuscirà a espellere le unità che non possono essere espulse, come il disco di avvio corrente.

    
risposta data 29.04.2014 - 05:02
fonte
0

Questo espellerà solo tutti i volumi di rete:

$ find /Volumes -maxdepth 1 -not -user root -print0 | xargs -0 umount
    
risposta data 29.04.2014 - 07:52
fonte
0

Se vuoi un AppleScript, ho adattato lo script pubblicato su: Collegamento per espellere tutti i dischi rigidi esterni ma non MobileBackups

a questo, e funziona benissimo. Ho messo l'applet per questo nel mio dock per utilizzare proprio prima di scollegare.

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
    
risposta data 04.01.2015 - 18:47
fonte

Leggi altre domande sui tag