10.8 Mountain Lion Lancer une action à la connexion d'un dictaphone

cipsela

Membre enregistré
6 Juillet 2017
3
0
69
Bonjour,

J'utilise un dictaphone philips. Lorsque celui-ci est posé sur son socle relié au mac mini il monte sur le bureau sous forme d'un volume : "volume-DPM"
Je voudrais créer une action telle que dès que le dpm est connecté se lance l'appli automator que j'ai créée et qui copie colle les fichiers audio contenus dans le volume-DPM vers un dossier partagé sur notre réseau.

Existe t il un moyen d'y parvenir ?

Merci
 
Dernière édition:
Sans doute. L'exemple le plus basique serait de lancer régulièrement un script qui, voyant que le volume externe est disponible, lancerait la copie.
Cependant il faut pour cela que la copie soit :
- ou bien un déplacement ;
- ou bien une copie différentielle (on ne copie que ce qui est différent ou nouveau).
 
la copie est prévue par un script shell dans automator. Ce script déplace les fichiers audio du volume DSPM vers un autre dossier sur un serveur.
Ce que je ne sais pas faire c'est créer un deamon qui détecte le dictaphone lorsqu'il monte sur le bureau
 
Bonjour,

j'aimerais aussi savoir faire ça. Une action de dossier peut-elle fonctionner sur un volume ? À priori, je me dis que c'est un dossier comme un autre.
 
Quand tout se passe bien :
  • tant que rien n'est branché, le volume DPSM n'apparaît pas et le dossier
    /Volumes/VOLUME-DPM n'existe pas ;
  • lorsqu'on branche l'appareil, le dossier /Volumes/VOLUME-DPM est créé et le disque externe est monté sur ce dossier ;
  • lorsqu'on débranche l'appareil, le disque externe est démonté et le le dossier est supprimé.
Mais il arrive parfois que ce ne soit pas le cas (arrêt intempestif par exemple) et le dossier demeure malgré l'absence du périphérique auquel il correspond. Ce qui fait qu'à la prochaine connexion on peut se trouver avec un dossier
/Volumes/VOLUME-DPM (2) qui est celui contenant les fichiers à déplacer.
Il faut donc être un peu prudent et essayer d'envisager tous les cas.

On ne peut pas non plus se baser uniquement sur les périphériques : quand on connecte un appareil, un ou plusieurs fichiers spéciaux sont créés, des devices, qui permettent d'accéder aux divers éléments proposés par ce périphérique. Pour les périphériques de stockage, c'est quelque chose comme /dev/disk2 (le périphérique en lui-même) et /dev/disk2s1 (la première partition de ce périphérique). Mais si tu as plusieurs périphériques, les numéros peuvent varier suivant l'ordre de branchement ou de découverte lors du démarrage. Donc, là encore, on risque d'être feinté par le système.

Tout ceci pour montrer que ce n'est pas aussi simple qu'on peut le croire et qu'il peut y avoir un petit peu de programmation à faire dans ton script.

Ce qui pourrait aider serait de savoir si quelque chose permet de repérer à coup sûr l'appareil. Un fichier présent dans le volume monté par exemple.

-----

Les précautions d'usage ayant été énoncées, ce serait moi, je ne me casserais pas la tête et je ferais un truc vraiment basique et peu élégant :
  • un petit script (bash) qui fait le boulot ;
  • programmer le lancement de ce script avec CRON toutes les minutes.
Et le script serait quelque chose comme (c'est juste un exemple) :
Bloc de code:
#!/bin/bash

# On teste que le script n'est pas déjà lancé
[ -f /var/tmp/copieDPM ] && exit 1

# On indique que le script est lancé
echo $BASHPID > /var/tmp/copieDPM

# On cherche les fichiers à copier et on les déplace
if [ -d /Volumes/VOLUME-DPM ] ; then
  find /Volumes/VOLUME-DPM -name "*.brol" -exec mv {} /le/dossier/destination \;
fi

# On a fini
rm /var/tmp/copieDPM

exit 0

C'est l'idée (il faut adapter la chaîne recherchée et le dossier destination à ton contexte). Ensuite il faut savoir si il y a des dossiers destinations différents suivant divers types de fichiers ; si, par exemple, on veut créer un sous-dossier horodaté dans le dossier destination, où l'on copiera les fichiers (pour pas tout entasser au même endroit) etc.

C'est déjà une première solution simple et peu coûteuse, sans ajout de logiciel, histoire de répondre au besoin immédiat.

-----

Pour launchd, c'est plus subtil. Cela pourrait être quelque chose comme ça :
Bloc de code:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.DPMScanAndMove</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/myDPMMove.sh</string>
    </array>
    <key>QueueDirectories</key>
    <array>
        <string>/Volumes/VOLUME-DPM</string>
    </array>
</dict>
</plist>

en supposant que le script précédant est nommé "/usr/local/bin/myDPMMove.sh".
La documentation pour l'écriture de jobs pour launchd est ici.

Note : pour que le script puisse être lancé, ne pas oublier de le déclarer comme exécutable avec la commande :
Bloc de code:
sudo chmod +x /usr/local/bin/myDPMMove.sh
 
  • J’aime
Réactions: luc1en
Merci pour ta réponse.
Mon script shell était celui ci:
mv /Volumes/DPM-VOLUME/* "/Volumes/courrier Jean Pierre-1"
où courrier JeanPierre-1 est le nom du volume partagé sur le serveur
ce script enregistré comme application automator fonctionne bien si le volume DPM-VOLUME est déjà monté sur le bureau

Je vais regarder la procédure launchd que tu indiques et reviens vers toi