14 votes

Comment éjecter tous les lecteurs à partir de la ligne de commande

Je veux éjecter tous les disques durs avec une commande sur le Terminal au lieu d'aller dans le Finder et d'appuyer sur éjecter sur chaque disque. Comment puis-je le faire ?

16voto

miguelmorin Points 865

Vous pouvez utiliser la solution AppleScript intégrée, comme indiqué dans la rubrique ce fil y cette page en ajoutant ceci à ~/.bash_profile :

alias ejectall='osascript -e "tell application \"Finder\" to eject (every disk whose ejectable is true)"'

Pour ce faire, vous devez donner l'autorisation au Terminal de contrôler le Finder, sinon vous obtiendrez cette erreur :

execution error: Not authorised to send Apple events to Finder. (-1743)

Si vous voulez un pur bash voici une fonction que vous pouvez appeler avec ejectall . Si vous avez renommé votre disque de démarrage ou si vous disposez de différentes sauvegardes Time Machine, vous devrez peut-être modifier la condition qui filtre les lecteurs.

ejectall() {
    total=0
    ejected=0

    for v in /Volumes/*; do
    if [[ $v != *"Macintosh HD" && $v != *"com.apple.TimeMachine"* ]]; then
        echo "Ejecting $v..."
        diskutil eject "$v"

        if [ $? -eq 0 ]; then
        ejected=$(($ejected + 1))
        fi
        total=$(($total + 1))
    fi
    done

    if [ $total -eq 0 ]; then
    echo "No drives to eject"
    else
    msg="$ejected drive(s) ejected"
    failed=$(($total - $ejected))
    if [ $failed -gt 0 ]; then
        msg="$msg, $failed drive(s) failed to eject"
    fi
    echo $msg
    fi
}

Les deux méthodes fonctionnent également pour les CD.

10voto

janm Points 2812

Utilisez diskutil .

Vous pouvez énumérer les dispositifs actuels avec diskutil list et utiliser diskutil eject device-name pour éjecter un périphérique comme dans le Finder.

Cela va un peu plus loin que la simple utilisation de umount en déconnectant, par exemple, un périphérique USB pour que le nœud /dev/disk disparaisse.

Voir man diskutil pour plus de détails.

6voto

Oded Ben Dov Points 4465

J'ai récemment commencé à apprendre les scripts shell et j'ai donc essayé de répondre à cette question à titre d'exercice.

script utilise diskutil list external pour obtenir tous les disques externes puis boucle sur la sortie pour les démonter.

J'ai ensuite créé un alias dans ~/.zshrc donc je n'ai plus qu'à taper eject dans Terminal pour éjecter tous les disques externes attachés à mon Mac.

(merci à @nohillside pour les ajustements)

#!/bin/sh

#script to eject all external drives
disks=$(diskutil list external | sed -n '/[Ss]cheme/s/.*B *//p')

if [ "$disks" ]
then
echo "$disks" | while read line ; do
    diskutil unmountDisk /dev/$line
  done
else
  echo "No external disks to eject"
fi

2voto

nohillside Points 82672

umount a une option pour démonter tous les systèmes de fichiers autres que le principal.

sudo umount -A

Vous pouvez également forcer cette opération au cas où des fichiers seraient encore occupés/verrouillés (avec le risque de perte de données) en exécutant la commande suivante

sudo umount -A -f

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X