#1 Le 13/12/2020, à 22:44
- FalCT60
[Résolu] Action fonction du test de présence d'un volume
Bonsoir,
Je progresse lentement mais sûrement dans l'élaboration de mon projet, grâce à l'aide reçue.
Je pense avoir placé la barre beaucoup trop haut, ce coup-ci.
Voici : j'ai besoin de déclencher une copie de fichiers séquentiellement sur de multiples disques externes partageant un seul et unique dock.
Admettons que ces disques se nomment Disque1, Disque2, Disque3, ..., Disque 9.
Les données sont lues depuis un fichier : disque de destination, nom du fichier devant être copié, répertoire de destination. Le séparateur est le point-virgule.
Je sais donc, avant l'opération, quel disque doit être présent.
J'ai codé ce qui suit :
while IFS=$';' read Disque Source Dest
do
printf '%s %s\n' "Insérez le disque " $Disque
until [ $(test -d "/media/$USERNAME/$Disque") ]
do
sleep 15
done
done < fichier_en_entrée
qui, à mon grand dam, ne semble pas détecter la présence du disque.
J'ai aussi pensé à quelque chose du genre
test -d /media/$USERNAME/$Disque || action_si_absent && action_si_présent
mais, outre le fait que je suis encore plus perdu, je me disperse et ce n'est pas très rationnel.
Et man test ne m'ayant pas permis d'y voir plus clair, des avis éclairés ne seraient pas de refus.
Avec mes remerciements,
Dernière modification par FalCT60 (Le 14/12/2020, à 22:25)
Hors ligne
#2 Le 13/12/2020, à 23:16
- Watael
Re : [Résolu] Action fonction du test de présence d'un volume
je te l'ai peut-être déjà dit :
avant de coder, il faut écrire un algorithme, c'est-à-dire l'enchaînement des opérations et des conditions qui conduisent à la réalisation de ton objectif clairement défini.
ça nous aidera aussi à t'aider.
Dernière modification par Watael (Le 13/12/2020, à 23:18)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 14/12/2020, à 22:21
- FalCT60
Re : [Résolu] Action fonction du test de présence d'un volume
Je ne pense pas que l'on puisse qualifier mes brouillons d'algorithmes. À la rigueur, un croisement entre du langage naturel et un ordinogramme.
Pour en revenir à mon problème, la barre n'était pas si haut. Le tout était de trouver les bons termes de recherches, afin de me conduire au moyen d'accomplir mon test.
En gros,
parcourir le fichier en entrée, récupérer la valeur de Disque, demander son montage et attendre jusqu’à ce qu'il soit monté.
À ce moment-là, poursuivre et boucler jusqu'à la fin du fichier en entrée
Dans mon script précédent, le problème était de savoir si le test de la commande until donnait quelque chose de probant, ou juste du vent (ce que je subodorais).
À force de chercher et de parcourir les pages, encore, encore et encore, j'ai fini par trouver mon bonheur : mountpoint, qui fait exactement ce que je veux, tester la présence d'un montage.
Du coup, mon script modifié
while IFS=$';' read Disque Source Dest
do
printf '%s %s\n' "Insérez le disque " $Disque
until montpoint -q /media/$USERNAME/$Disque
do
sleep 2
done
tout_ce_que_j'ai_toujours_rêvé_de_faire
done < fichier_en_entrée
fonctionne à présent parfaitement.
J'ai réduit la valeur de sleep à 2 s, pas sûr que cela ait une importance.
Il faut bien comprendre : ce n'est pas parce que je sollicite de l'aide que j'attends la bouche ouverte que ça me tombe tout cuit.
Généralement, je suis saturé, je tourne en rond et je ne sais plus comment m'en dépêtrer, ça fume de tous côtés, c'est le brouillard total.
J'y retourne lorsque j'ai l'esprit un peu plus clair - souvent, j'oublie même d'aller voir si j'ai obtenu une réponse, et je n'ai absolument pas la prétention d'en obtenir sur le champ.
Dans le cas présent, je suis très content d'avoir pu trouver tout seul, et peut-être - qui sait ? - ceci pourra-t-il être utile à quelque autre débutant dans mon cas.
Mis bout-à-bout des autres sections construites grâce aux précédentes contributions des membres de ce forum, cela donne un script qui, dans sa totalité :
liste le contenu d'un disque sur lequel j'ai sauvegardé l'image de mes (nouveaux) blu-ray
génère un fichier texte contenant les diverses informations que je souhaite pouvoir retrouver (année, titre, taille, etc.)
en fonction de l'année et du titre, détermine le volume sur lequel il sera transféré
parcourt le fichier généré en 1- et, une fois le volume attendu monté, y transfère l'image du disque
Je n'ai pas tout détaillé, mais les grandes lignes y sont.
Et j'ai appris des choses que - pour certaines en tout cas - je serai capable de mettre de nouveau en pratique ultérieurement.
Et voilà un autre sujet qui peut passer en résolu.
Et j'ai modifié le titre, pour qu'il corresponde un peu plus à la réalité - chose qui n'est pas aisée, lorsque les neurones s'entrechoquent.
Dernière modification par FalCT60 (Le 14/12/2020, à 22:27)
Hors ligne
#4 Le 14/12/2020, à 22:29
- kamaris
Re : [Résolu] Action fonction du test de présence d'un volume
Tu pourrais utiliser read -p pour demander à l'utilisateur d'insérer/monter le disque, en attendant sa réponse pour continuer.
Sinon pour ce que tu as écrit en #1, c'est
until test -d "/media/$USERNAME/$Disque"
ou
until [ -d "/media/$USERNAME/$Disque" ]
mais pas
until [ $(test -d "/media/$USERNAME/$Disque") ]
Autre chose : test est une commande interne à bash, donc on accède à son aide par help test, ou dans man bash.
Hors ligne
#5 Le 14/12/2020, à 22:52
- FalCT60
Re : [Résolu] Action fonction du test de présence d'un volume
Tu pourrais utiliser read -p pour demander à l'utilisateur d'insérer/monter le disque, en attendant sa réponse pour continuer.
Je n'avais pas compris la signification de cette option.
Je la testerai (ce n'est pas pour tout de suite) pour vérifier ce qu'il m'est possible d'en tirer.
Sinon pour ce que tu as écrit en #1, c'est
until test -d "/media/$USERNAME/$Disque"
ou
until [ -d "/media/$USERNAME/$Disque" ]
mais pas
until [ $(test -d "/media/$USERNAME/$Disque") ]
Pour être honnête, je serai totalement incapable de me rappeler de quelle manière j'en suis arrivé à ce truc-là.
Autre chose : test est une commande interne à bash, donc on accède à son aide par help test, ou dans man bash.
Effectivement, je comprends à présent pourquoi test --help ne me retournait rien.
Pour le man, j'utilise la recherche google sur mon PC w10 pour des raisons de confort (écran 24", contre 13" seulement sur mon portable Linux).
Encore merci pour tes précieuses précisions (que j'ai failli manquer, car à 10 s près j'étais en train de tout fermer pour aller me coucher).
Et une bonne nuit.
Hors ligne
#6 Le 15/12/2020, à 02:13
- Watael
Re : [Résolu] Action fonction du test de présence d'un volume
$' ' n'est utile que pour interpréter des séquences d'échappements (\n, \t, \xHH...).
until mountpoint ...; do sleep... signifie que jusqu'à ce que le répertoire soit un point de montage, alors tu attends 2 secondes.
il y a un montage automatique ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 15/12/2020, à 20:56
- FalCT60
Re : [Résolu] Action fonction du test de présence d'un volume
Non, je retire proprement le disque présent, et j'insère celui qui est demandé.
Une fois monté par le système, la copie démarre.
J'avais cru comprendre que until mountpoint montage signifiait jusqu'à ce que montage soit présent.
Et le sleep, si j'ai bien compris la page sur laquelle j'ai lu ça, pour éviter de surcharger le système.
Serais-je dans l'erreur ?
Hors ligne
#8 Le 15/12/2020, à 22:18
- kamaris
Re : [Résolu] Action fonction du test de présence d'un volume
Non, pas vraiment, mais dans le cas où ça n'est pas un montage automatique, ça a plus de sens d'afficher un prompt demandant à l'utilisateur de dire quand il est prêt (comme je te disais en #4), plutôt que de tester la présence du point de montage toutes les N secondes.
Hors ligne
#9 Le 15/12/2020, à 22:30
- Watael
Re : [Résolu] Action fonction du test de présence d'un volume
'comprends pas :
il y a un montage automatique ?
Non, [...].
Une fois monté par le système,
donc, automatiquement ! non ?
+1 kamaris
Dernière modification par Watael (Le 16/12/2020, à 19:51)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#10 Le 16/12/2020, à 19:29
- FalCT60
Re : [Résolu] Action fonction du test de présence d'un volume
D'accord, j'ai compris : ce n'est pas moi qui mount le disque, bien que je l'insère dans son support.
J'ai (sans doute mal) testé read -q : il sort après l'insertion du premier disque, même s'il y en a plusieurs, alors qu'avec sleep il les demande tous lorsqu'il faut.
Je verrai cela lorsque je disposerai d'un peu plus de temps (et que Madame sera de meilleure composition).
Hors ligne
#11 Le 18/12/2020, à 02:13
- kamaris
Re : [Résolu] Action fonction du test de présence d'un volume
Tu remplaces juste le sleep 2 par un read -p dans ton code plus haut, et ça doit être bon :
until montpoint -q "/media/$USERNAME/$Disque"; do
read -p "Montez le disque $Disque puis appuyez sur Entrée quand vous êtes prêt"
done
Hors ligne
#12 Le 18/12/2020, à 18:33
- FalCT60
Re : [Résolu] Action fonction du test de présence d'un volume
C'est donc bien ce que j'ai fait, et le script s'est terminé juste après avoir validé, au lieu d'enchaîner sur les suivants.
Du coup, j'ai remis le sleep 2, et l'enchaînement s'est effectué jusqu'à la fin.
Bon, ce n'est pas bien grave, ainsi que je l'ai écrit plus haut, ça fonctionne ainsi, et lorsque j'aurai plus de temps je me pencherai plus sérieusement dessus, histoire de ne pas laisser une incertitude perdurer.
Et puis, j'ai pas mal appris, une fois de plus.
Bonnes fêtes à tous et à toutes.
Hors ligne