OVH Cloud OVH Cloud

Monter et demonter des volumes

34 réponses
Avatar
patrick.1150RTcazaux
Bonjour,

Je suis à la recherche d'un utilitaire tout petit et très discret, qu'on
pourrait par exemple mettre dans la barre des menus, ou dans le Dock, et
qui permettrait de monter et de démonter des disques branchés sur le
Mac, à la demande.
Exemple, j'ai mon disque de sauvegarde branché en permanence, mais je ne
fais mes sauvegardes que la nuit, j'ai donc programmé grâce à Cronnix un
cron qui le monte et un autre qui le démonte avant et après. Mais il
m'arrive parfois de vouloir récupérer tel ou tel ancien fichier qui s'y
trouve. Et dans ce cas, je ne peux que l'éteindre puis le rallumer, ou
encore brancher et débrancher la prise Firewire, deux chose qui
m'embêtent. Peut-on faire ça par soft sans être obligé de lancher à
chaque fois l'utilitaire de disques ?

Merci d'avance
--
Tardigradus

10 réponses

1 2 3 4
Avatar
Nicolas.MICHEL
Tardigradus wrote:

Nicolas MICHEL wrote:

Concrêtement, on fait ça comme je te l'ai écrit.


Ben justement, j'ai pas compris. Je crois qu'i l y a un préalable qui
m'échappe. On le fait comment, ce fichier ? Avec Textedit ? Et comment
le rend-on exécutable ? moi y'en a macounet, pas Unixien :)


Ah, je pensais que tu étais à l'aise avec les shell script, désolé.
Faut dire que quand un contributeur parle de crontab, ...

Alors je vais tenter de vous expliquer la chose, à eric et à toi.
C'est un peu long, désolé.

Donc on vas faire un script bash.
C'est un fichier texte qui a les caractéristiques suivantes :
- il commence par #!/bin/bash
- il a les droits d'exécution
- il a des retours de chariot de type unix
- pour qu'il soit double-clicable, son nom doit finir par .command

Chaque ligne du script sera exécutée l'une après l'autre.
Le contennu est une suite de commandes comme on en écrit dans le
terminal.

Prennez un éditeur de texte dans la main droite.
Disons TextEdit pour faire standard.
Dans les prefs, vérifiez qu'il enregistre au format texte, pas de rtf ou
autre.
Puis écrivez vos 2 lignes du genre :

#!/bin/bash
diskutil mount $(diskutil list |awk '/ExternalDiskName/ {print $6}')

Evidement, changer "ExternalDiskName" par le nom de votre disque.


De la main gauche, vous ouvrez une fenêtre de terminal et tapez les
commandes au fur et à mesure, pour les vérifier :

% diskutil list

Puis vous ajouter :

% diskutil list |awk '/ExternalDiskName/ {print $6}'

(où "ExternalDiskName" est le nom que le terminal vient de retourner)

Si le terminal vous donne "disk1s2" et que ça correspond à votre disque,
c'est que votre script marchera.

Sauvez votre fichier où vous voulez, disons sur le bureau.
Nomez-le par exemple "mount.command"

Ensuite, de votre 3ème main, ouvrez BatChmod, glissez mount.command
dessus, cochez la case "x" pour le possesseur, dites "appliquer". C'est
pour avoir la permission d'exécuter ce script.

Voilou, si tout vas bien ça devrait marcher.
Double-cliquez le script pour voir...


















A présent quelques détail supplémentaires :

Si vous avez plusieures partitions avec des nom proches du genre :
data
data1
data2
alors /data/ vas foirer.
dans ce cas essayez avec un espace : / data /
ou changer le nom du disque
ou alors utilisez "grep -E" comme dit plus bas.

Alternativement à BatChmod, on peut taper au terminal un truc genre :
% sudo chmod u+x ~/Desktop/mount.command

Si vous avez des caractères spéciaux, utilisez grep :

diskutil mount "$(diskutil list |grep -E " Ex.*me " |awk '{print $6}')"

grep permet de faire des recherches sur des expressions régulières.
awk le fait certainement aussi, mais je le connais moins bien.

Pour décrire ce qui se passe, il y a un $() dans la ligne. Son contennu
doit être exécuté avant le reste et le résultat remplacera le $().

Donc on a d'abord un "diskutil list" qui est exécuté.
Le résultat est passé à grep avec grâce au "|" (pipe).

grep recherche toutes les lignes contennant l'expression " Ex.*me "
(ou toute autre expression que vous taperez)
Si les expressions régulières ne vous inspirent pas, donnez moi le nom
de vos disque je vous pondrai le truc. L'aventage ici est que ça
supporte tous les accents, espaces et caractères spéciaux qu'on veux.

Ensuite grep passe à awk ce qu'il a trouvé et awk affiche le 6ème champ
de chaque ligne. S'il retourne GB, remplacer $6 par $7.
ça peut arriver avec un espace dans le nom, je suppose.

Quand awk a finit, le résultat qu'il donne vient remplacer le contennu
de $() et la ligne est ré-exécutée.
En l'occurence ça devrait donner un truc genre :

diskutil mount "disk1s3"

Notez que faire un script shell aussi simple ne devrait pas pauser trop
de problèmes à une personne qui pratique déjà le terminal.
Si vous ne pratiquez pas, soit vous être très courageux soit vous me
postez le nom de votre partition et votre mail, je vous ponds ça en 10x
moins de temps qu'il ne m'en a falut pour écrire ce post :)

Voilou, j'espère avoir été clair, mais j'ai des doutes :))
--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas


Avatar
patrick.1150RTcazaux
Nicolas MICHEL wrote:

Voilou, si tout vas bien ça devrait marcher.
Double-cliquez le script pour voir...


Ben pas encore tout à fait. Le disque ne monte pas. Voici ce que dit la
fenêtre qui s'ouvre lorsque j'exécute le script :

Last login: Fri Sep 15 10:38:32 on ttyp2
Welcome to Darwin!
You have new mail.
/Users/pat/Desktop/SeagateMount.command; exit
Patrick:~ pat$ /Users/pat/Desktop/SeagateMount.command; exit
diskutil: bad interpreter: No such file or directory/bash
logout
[Opération terminée]


Pourtant, j'avais bien ceci précédemment, comme tu le disais :

Patrick:~ pat$ diskutil list |awk '/Seagate_300/ {print $6}'
disk1s10



Je me demande s'il n'y a pas un problème avec l'histoire des retour
chariot Unix, ar j'ai copié-collé ton instruction en changeant le nom du
disque de la façon suivante :

#!/bin/bash
diskutil mount $(diskutil list |awk '/Seagate_300/ {print $6}')




Si je vire le dernier retour, il n'y a plsu de message d'erreur, mais
toujours pas de disque monté :

Last login: Fri Sep 15 10:39:08 on ttyp2
/Users/pat/Desktop/SeagateMount.command; exit
Welcome to Darwin!
You have new mail.
Patrick:~ pat$ /Users/pat/Desktop/SeagateMount.command; exit
logout
[Opération terminée]



--
Tardigradus

Avatar
Nicolas.MICHEL
Tardigradus wrote:

Je me demande s'il n'y a pas un problème avec l'histoire des retour
chariot Unix, ar j'ai copié-collé ton instruction en changeant le nom du
disque de la façon suivante :

#!/bin/bash
diskutil mount $(diskutil list |awk '/Seagate_300/ {print $6}')




Quel encodage utilises-tu ?
Essaies le occidental (mac roman)

Sinon tu peux tester un debuggage :

#!/bin/bash -vx
diskutil mount $(diskutil list |awk '/Seagate_300/ {print $6}')



Tu peux aussi faire un
% cat /Users/pat/Desktop/SeagateMount.command

Et voir ce qui s'affiche.

Enfin tu peux essayer textwrangler, pour voir, il a plein de prefs.


--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas


Avatar
patrick.1150RTcazaux
Nicolas MICHEL wrote:

Enfin tu peux essayer textwrangler, pour voir, il a plein de prefs.


Voilà, c'était ça : avec Textwrangler, ça marche, enfin... presque. En
effet, si je fdouble clique l'icône, c'est Textwrangler qui s'ouvre,
bien que j'ai rendu le fichier exécutable. En revanche, si je force
l'ouverture avec Terminal, ça fonctionne.
Ensuite, dans l'hypothèse où ça marchera comme il faut d'ici peu, y
a-t-il un moyen que Terminal ne s'ouvre pas ? ou se referme tout de
suite après ?

--
Tardigradus

Avatar
Nicolas.MICHEL
Tardigradus wrote:

Nicolas MICHEL wrote:

Enfin tu peux essayer textwrangler, pour voir, il a plein de prefs.


Voilà, c'était ça : avec Textwrangler, ça marche, enfin... presque. En
effet, si je fdouble clique l'icône, c'est Textwrangler qui s'ouvre,
bien que j'ai rendu le fichier exécutable. En revanche, si je force
l'ouverture avec Terminal, ça fonctionne.
Ensuite, dans l'hypothèse où ça marchera comme il faut d'ici peu, y
a-t-il un moyen que Terminal ne s'ouvre pas ? ou se referme tout de
suite après ?


Il se nomme bien SeagateMount.command ?
Si oui, c'est étrange.
Le Finder est un peu largué sur ce coup.
Tu peux peut-être tenter de le renomer .doc, puis de remettre .command
Après, si ça ne suffit pas, il te faut un soft tel que SetFile (en cli)
ou resedit (sous classic) ou File Buddy (shareware) pour effacer le type
et creator.

Pour que la fenêtre se referme, si tu n'utilises pas le terminal pour
autre chose il y a une solution vite et sale : ajouter un "kill" à la
fin du script, genre :

killall Terminal.app


Sinon tu peux fermer la fenêtre mais laisser le termial ouvert...
Il y a eu un post à ce sujet mais j'ai oublié.
Ce doit être ce post :

Newsgroups: fr.comp.os.mac-os.x
Subject: Re: [Q] Lancement shellscript par double-clic
Message-ID:


--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas


Avatar
Nicolas.MICHEL
Nicolas MICHEL wrote:


killall Terminal.app


Zut, c'est
killall Terminal

et pas de .app
--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas

Avatar
patrick.1150RTcazaux
Nicolas MICHEL wrote:

Il se nomme bien SeagateMount.command ?
Si oui, c'est étrange.
Le Finder est un peu largué sur ce coup.


Oui mais c'est résolu : dans sa fenêtre d'info, je lui ai dit que le
fichier devait être ouvert avec Terminal. Il oncservait toutefois le
fait que c'était un fichier TextWrangler. J'ai fait ce que tu dis
ci-dessous et maintenant c'est bien un script :)

Tu peux peut-être tenter de le renomer .doc, puis de remettre .command

Pour que la fenêtre se referme, si tu n'utilises pas le terminal pour
autre chose il y a une solution vite et sale : ajouter un "kill" à la
fin du script, genre :

killall Terminal.app


Pas de commande "quitter" bien propre ? Bon, ben va pour killall...

Merci beaucoup de la peine que tu t'es donnée.

--
Tardigradus

Avatar
Saïd
Tardigradus :

killall Terminal.app


Pas de commande "quitter" bien propre ? Bon, ben va pour killall...

Merci beaucoup de la peine que tu t'es donnée.



osascript
Tell Application "Terminal" To Quit


--
Saïd.
"Bless this, O Lord, that with it thou mayst blow thine enemies to tiny
bits, in thy mercy."
In the Book of Armaments, Chapter 4. (The Holy Hand Grenade)


Avatar
Nicolas.MICHEL
Saïd wrote:

Tardigradus :

killall Terminal.app


Pas de commande "quitter" bien propre ? Bon, ben va pour killall...

Merci beaucoup de la peine que tu t'es donnée.



osascript
Tell Application "Terminal" To Quit


Et en quoi un osascript, bâtard d'entre deux mondes, serait-il plus
propre qu'un killall, stp ? :)

Quand je dis que c'est vite et sale, c'est que s'il y a plusieures
fenêtres d'ouvertes, killall ferme tout. Mais ta commande aussi, non ?

--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas



Avatar
Saïd
Nicolas MICHEL :
Saïd wrote:

Tardigradus :

killall Terminal.app


Pas de commande "quitter" bien propre ? Bon, ben va pour killall...

Merci beaucoup de la peine que tu t'es donnée.



osascript
Tell Application "Terminal" To Quit


Et en quoi un osascript, bâtard d'entre deux mondes, serait-il plus
propre qu'un killall, stp ? :)

Quand je dis que c'est vite et sale, c'est que s'il y a plusieures
fenêtres d'ouvertes, killall ferme tout. Mais ta commande aussi, non ?



Non. Si tu as un editeur de texte ou un ssh dans l'une des fenetres, mon
script va faire que Terminal demandera la permission de fermer ladite
fenetre.


--
Saïd.
"Bless this, O Lord, that with it thou mayst blow thine enemies to tiny
bits, in thy mercy."
In the Book of Armaments, Chapter 4. (The Holy Hand Grenade)




1 2 3 4