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 ?
Réponses
Trop de publicités?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.
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.
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