Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/07/2022, à 05:26

arvernes

Trouver un sous-répertoire dans une arborescence différente

Bonjour,
Mon problème est le suivant :
Dans un script qui fait plein de choses, je voudrais en plus rajouter le fait de zipper un sous-répertoire dont le nom est le même sur trois ordinateurs différents (le script est le même entre ces 3 ordis) mais dont l'arborescence est différente. Je m'explique :
Sur l'ordi 1 le chemin pour accéder à ce sous-répertoire est : /home/blabla/.thunderbird/2564ys.default/Mail/pop.123
Sur l'ordi 2 le chemin pour accéder à ce sous-répertoire est : /home/blabla/.thunderbird/muyz548.default/Mail/pop.123
Sur l'ordi 3 le chemin pour accéder à ce sous-répertoire est : /home/blabla/.thunderbird/54uyat.default/Mail/pop.123
Pour le moment je traite le truc avec un IF, ELIF,
Donc IF ordi1 cd le bon chemin, ELIF ordi2, etc....
Mais si il y a une commande qui me permette de passer directement dans le sous-répertoire Mail/pop.123 je préférerais.
Cependant, j'ai une autre question dans ma gestion du truc avec IF et ELIF. Je voudrais pouvoir afficher un message si le chemin pour aller dans Mail/pop.123 que j'ai noté dans mon script n'est pas le bon. Exemple si j'ai noté dans mon script "cd /home/blabla/.thunderbird/muyz508.default/Mail/pop.123" au lieu de "/home/blabla/.thunderbird/muyz548.default/Mail/pop.123" je voudrais pouvoir le gérer soit pas un message comme je le disais, soit par une autre commande du script pour écrire dans un log l'erreur.
Bon je ne sais pas si je suis très clair dans mes explications. Merci d'avance. Francois

Hors ligne

#2 Le 01/07/2022, à 05:41

nany

Re : Trouver un sous-répertoire dans une arborescence différente

Bonjour,



Je n’ai pas bien compris mais à tout hasard :

find /home/blabla/.thunderbird -type d -name "pop.123" -exec cd '{}' \;

?

Hors ligne

#3 Le 01/07/2022, à 06:33

serged

Re : Trouver un sous-répertoire dans une arborescence différente

Sur chaque ordi, tu crées un lien symbolique vers le profil :
Sur ordi 1

ln -s  /home/blabla/.thunderbird/2564ys.default ~/profil

idem sur chaque ordi...
Et dans ton script tu feras un :

cd ~/profile/Mail/pop.123

(ou la commande que tu veux)


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#4 Le 01/07/2022, à 07:20

arvernes

Re : Trouver un sous-répertoire dans une arborescence différente

nany a écrit :

Je n’ai pas bien compris mais à tout hasard :

find /home/blabla/.thunderbird -type d -name "pop.123" -exec cd '{}' \;

?

Lorsque je lance la commande, il me sort :

find: ‘cd’: Aucun fichier ou dossier de ce type

c'est la commande -exec cd .... qui à l'air de ne pas marcher. j'ai trouvé ça sur le net : "I don't think you can call cd using exec, because it is a builtin command, meaning it is part of the code that makes up the shell." ainsi que ça : "Most versions of unix have an external program called cd because Posix, in its wisdom, requires this. An external cd program is terribly useless. In the find example posted by the OP, the cd program runs as a separate process, it does indeed attempt a chdir() system call into the specified directory. Then it exits, leaving the parent process' current directory unchanged. The exit indicated whether or not it succeeded.

Sometimes stuff like acl's can affect whether or not you can cd into a directory. To produce a list of those directories into which you cannot cd, you could do:

find . -type d ! -exec /usr/bin/cd {} \; -print 2>/dev/null

"

Hors ligne

#5 Le 01/07/2022, à 07:24

arvernes

Re : Trouver un sous-répertoire dans une arborescence différente

serged a écrit :

Sur chaque ordi, tu crées un lien symbolique vers le profil :
Sur ordi 1

ln -s  /home/blabla/.thunderbird/2564ys.default ~/profil

idem sur chaque ordi...
Et dans ton script tu feras un :

cd ~/profile/Mail/pop.123

(ou la commande que tu veux)

Merci. Oui c'est une bonne idée, je n'y avais pas pensé. Merci

Hors ligne

#6 Le 01/07/2022, à 19:23

Sciensous

Re : Trouver un sous-répertoire dans une arborescence différente

à voir aussi l'utilisation de: 

/home/blabla/.thunderbird/*.default/Mail/pop.123

?

ou ai-je faux ?
roll


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#7 Le 01/07/2022, à 19:45

iznobe

Re : Trouver un sous-répertoire dans une arborescence différente

Bonjour , a premier vue j ' utiliserais aussi le joker pour la partie changeante du chemin absolu , comme le propose @Sciensous .


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#8 Le 01/07/2022, à 19:49

MicP

Re : Trouver un sous-répertoire dans une arborescence différente

Bonjour

Dans son message #1, arvernes a écrit :


Dans un script qui fait plein de choses, je voudrais en plus rajouter le fait de zipper un sous-répertoire dont le nom est le même sur trois ordinateurs différents (le script est le même entre ces 3 ordis) mais dont l'arborescence est différente. Je m'explique :
Sur l'ordi 1 le chemin pour accéder à ce sous-répertoire est : /home/blabla/.thunderbird/2564ys.default/Mail/pop.123
Sur l'ordi 2 le chemin pour accéder à ce sous-répertoire est : /home/blabla/.thunderbird/muyz548.default/Mail/pop.123
Sur l'ordi 3 le chemin pour accéder à ce sous-répertoire est : /home/blabla/.thunderbird/54uyat.default/Mail/pop.123

Est-ce qu'il y aura au final qu'un seul ou plusieurs fichiers zip ?
Et où est-ce que tu vas mettre le ou les fichier(s) zip ?

=======
Il vaut mieux ne pas (et je dirais même : il ne faut pas) utiliser la commande cd dans un script,
sinon, tu ne sauras plus quel est le répertoire courant en cas d'arrêt du script à cause d'une erreur.

Il faut donc s'arranger pour n'utiliser que des chemins absolus.

Dernière modification par MicP (Le 01/07/2022, à 19:56)

Hors ligne

#9 Le 04/07/2022, à 10:39

arvernes

Re : Trouver un sous-répertoire dans une arborescence différente

Sciensous a écrit :

à voir aussi l'utilisation de: 

/home/blabla/.thunderbird/*.default/Mail/pop.123

?

ou ai-je faux ?
roll

Non, c'est pas faux, mais ça ne colle pas dans les environnements dans lequel je fais tourner ce script. Dans certains cas (en fonction de l'ordi sur lequel le script tourne), le sous-répertoire est lkos56.default-release, dans d'autres cas, 54hkoiur.default, etc.... donc je n'arrive pas à m'en sortir.
Pour le moment j'ai rajouté dans mon script la création du lien symbolique comme quelqu'un me l'a conseillé, et sa suppression à la fin de l'opération. Ca marche bien

Hors ligne

#10 Le 04/07/2022, à 10:55

arvernes

Re : Trouver un sous-répertoire dans une arborescence différente

MicP a écrit :

Est-ce qu'il y aura au final qu'un seul ou plusieurs fichiers zip ?
Et où est-ce que tu vas mettre le ou les fichier(s) zip ?

Il n'y a qu'un seul fichier, et le fichier je le déplace dans un endroit pour que rsync me synchronise l'ordi avec un backup. Quand je repasse sur un autre ordi je synchronise le nouvel ordi avec le backup (je ne veux pas passer par un cloud). C'est quelqu'un sur le forum (alex2423) qui m'avait conseillé de faire comme ça, et j'avoue que son conseil m'a vraiment été utile.


Il vaut mieux ne pas (et je dirais même : il ne faut pas) utiliser la commande cd dans un script,
sinon, tu ne sauras plus quel est le répertoire courant en cas d'arrêt du script à cause d'une erreur.

En général dans mes scripts, je fais un cd avant de me déplacer dans un répertoire. De cette manière je sais que je suis dans ma home directory, et donc le chemin que j'indique après est absolu.
Une question : comment puis-je faire dans un script pour qu'il m'avertisse qu'il y a eu une erreur. Exemple, je lui donne comme commande un truc du genre

cd /home/blabla/.thunderbird/qsdfqdf25.sdf

et que ce sous-répertoire n'existe pas. Mon script tourne avec un cron, donc je ne suis pas devant un terminal.

Hors ligne

#11 Le 04/07/2022, à 12:57

iznobe

Re : Trouver un sous-répertoire dans une arborescence différente

arvernes a écrit :
Sciensous a écrit :

    à voir aussi l'utilisation de:

   

/home/blabla/.thunderbird/*.default/Mail/pop.123

    ?

    ou ai-je faux ?

Dans certains cas (en fonction de l'ordi sur lequel le script tourne), le sous-répertoire est lkos56.default-release, dans d'autres cas, 54hkoiur.default, etc.... donc je n'arrive pas à m'en sortir.

Bonjour , ba il suffit d' elargir le champ du joker :

/home/blabla/.thunderbird/*/Mail/pop.123

Dernière modification par iznobe (Le 04/07/2022, à 12:58)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#12 Le 04/07/2022, à 16:07

MicP

Re : Trouver un sous-répertoire dans une arborescence différente

Dans son message #10, arvernes a écrit :

… comment puis-je faire dans un script pour qu'il m'avertisse qu'il y a eu une erreur.  …

Toutes les commandes retournent un code d'erreur
et si ce code d'erreur est différent de zéro, c'est qu'il y a eu une erreur.

michel@debbull:~$ cd ~/RepQuiNexistePas
bash: cd: /home/michel/RepQuiNexistePas: Aucun fichier ou dossier de ce type
michel@debbull:~$ echo $?     # J'affiche le code d'erreur retourné 
1
michel@debbull:~$ 
michel@debbull:~$ cd ~/Téléchargements
michel@debbull:~/Téléchargements$ echo $?      # J'affiche le code d'erreur retourné
0
michel@debbull:~/Téléchargements$ 

Et dans un script, on peut utiliser un if pour tester si l'exécution de la commande a provoqué ou non une erreur :

#!/bin/bash

if $(cd /home/blabla/.thunderbird/qsdfqdf25.sdf); then
    echo "Ok, la commande a bien été exécutée"
else
    echo "Ko : il y a eu un problème là."
fi

Dernière modification par MicP (Le 04/07/2022, à 17:00)

Hors ligne

#13 Le 04/07/2022, à 17:24

arvernes

Re : Trouver un sous-répertoire dans une arborescence différente

iznobe a écrit :

Bonjour , ba il suffit d' elargir le champ du joker :

/home/blabla/.thunderbird/*/Mail/pop.123

Ben non, ça ne marchera pas. En effet sur un ordinateur, j'ai deux sous-répertoires sous .thunderbird, et sur un autre ordinateur, je n'en ai qu'un. C'est le même script qui tourne sur plusieurs ordis. Je pourrai le résoudre avec un IF et HOSTNAME, mais ça m'oblige à intervenir sur le script si j'ai envie de le faire tourner sur un nouvel ordi. Pour moi, c'est, mais je peux me planter, le conseil du lien symbolique qui a résolu mon pb. Je vais y rajouter ce que me dit MicP sur la capture d'erreur, et ça devrait faire l'affaire.
Merci à tous pour vos précieux et toujours utiles conseils.

Hors ligne

#14 Le 04/07/2022, à 17:28

arvernes

Re : Trouver un sous-répertoire dans une arborescence différente

MicP a écrit :

Toutes les commandes retournent un code d'erreur
et si ce code d'erreur est différent de zéro, c'est qu'il y a eu une erreur.

Impec. Je vais rajouter cette méthode dans mon script. Merci

Une question : comment éviter que le script me sorte ça :

 ligne 3 : cd: /home/blabla/.thunderbird/qsdfqdf25.sdf: Aucun fichier ou dossier de ce type
Ko : il y a eu un problème là.

et qu'il ne m'affiche que " Ko : il y a eu un problème là."

Dernière modification par arvernes (Le 04/07/2022, à 17:46)

Hors ligne

#15 Le 04/07/2022, à 17:41

Watael

Re : Trouver un sous-répertoire dans une arborescence différente

moi, je les renommerais pour qu'ils aient tous le même nom, et adapterais les fichiers qui y font références (installs et profiles, c'est des .ini). KISS!

Dernière modification par Watael (Le 08/07/2022, à 13:11)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#16 Le 04/07/2022, à 18:04

iznobe

Re : Trouver un sous-répertoire dans une arborescence différente

autre solution , vu qu ' ils finissent tous pareil .
on pourrait utiliser find , genre :

find /home/blabla/.thunderbird/ -name pop.123

on met ca dans un variable nommée par exemple " chemin_profil " et voilou .

Dernière modification par iznobe (Le 04/07/2022, à 18:06)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#17 Le 04/07/2022, à 19:14

MicP

Re : Trouver un sous-répertoire dans une arborescence différente

Oui, c'est ce qu'on pourrait penser avec le peu qu'on sait, mais on n'a pas une vue d'ensemble du contexte,
et s'il existe plusieurs sous-répertoires du répertoire /home/blabla/.thunderbird/ alors la commande find pourrait très bien retourner un tableau de plusieurs éléments contenants un fichier nommé pop.123
je suis sûr que l'on pourrait proposer une solution plus pertinente si on avait toutes les informations manquantes :

Il faudrait voir au moins le contenu du script, et la liste de tous les fichiers à archiver, et savoir où et comment sera créée l'archive
et dans quel but puisque je présume que c'est dans le but de pouvoir les restaurer, mais je me trompe peut-être, on peut tout envisager, mais il n'y a sans doute qu'une seule de ces hypothèse à prendre en compte.
Bref, d'ici, c'est le flou total, j'ai l'impression d'entrevoir quelques brides de solutions dont je ne connais même pas les données du problème qu'elles cherchent à résoudre.

Dernière modification par MicP (Le 04/07/2022, à 20:05)

Hors ligne

#18 Le 08/07/2022, à 05:38

arvernes

Re : Trouver un sous-répertoire dans une arborescence différente

MicP a écrit :

Il faudrait voir au moins le contenu du script, et la liste de tous les fichiers à archiver, et savoir où et comment sera créée l'archive
et dans quel but puisque je présume que c'est dans le but de pouvoir les restaurer, mais je me trompe

Je pensais avoir dit pourquoi j'avais besoin de ça.

Le but est de reprendre le sous-répertoire et tout ce qu'il contient, pour en faire une archive .zip . Ce sous-répertoire pop.xxxx contient tous les mails que je reçois et tous les mails que j'envoie avec mon adresse chez free. pour ensuite passer cette archive .zip dans un sous répertoire qui est synchronisé avec plein de répertoires de mon ordi vis à vis d'un HD externe. Ce HD externe est le seul élément que je balade d'un endroit à un autre, endroit dans lequel il y a un ordi. En arrivant dans cet endroit, je branche le HD externe, je lance mon script qui synchronise alors l'ordinateur vis à vis du HD externe et voilà. J'ai donc exactement sur cet ordinateur tout le travail que j'avais pu faire sur l'autre ordi. Comme j'ai plusieurs endroits à visiter, c'est vraiment une méthode qui me convient, et qui est simple comme tout à mettre en oeuvre.
Mon seul pb était mes mails. Je n'arrivais pas à suivre mon travail (envoi, réception de mails) entre les différents endroits. Là maintenant ça baigne.

Dans mon précédent message je mettais :
Une question : comment éviter que le script me sorte ça :

 ligne 3 : cd: /home/blabla/.thunderbird/qsdfqdf25.sdf: Aucun fichier ou dossier de ce type
Ko : il y a eu un problème là.

et qu'il ne m'affiche que " Ko : il y a eu un problème là."
Merci

Hors ligne

#19 Le 08/07/2022, à 07:38

MicP

Re : Trouver un sous-répertoire dans une arborescence différente

… qu'il ne m'affiche que " Ko : il y a eu un problème là." …

Rediriger le flux stderr de la commande cd vers /dev/null => le message d'erreur ne sera pas affiché

#!/bin/bash

if $(cd /home/blabla/.thunderbird/qsdfqdf25.sdf 2>/dev/null); then
    echo "Ok, la commande a bien été exécutée"
else
    echo "Ko : il y a eu un problème là."
fi

Dernière modification par MicP (Le 08/07/2022, à 08:17)

Hors ligne

#20 Le 08/07/2022, à 09:22

arvernes

Re : Trouver un sous-répertoire dans une arborescence différente

Impec. Merci beaucoup

Hors ligne