#1 Le 08/03/2021, à 19:10
- arvernes
Boucle for do avec des noms de répertoires
Bonjour,
Total débutant en bash - précision importante....
J'ai une boucle for do done, et dans la boucle for, j'ai des noms de répertoires. Je n'ai pas de pb tant que le répertoire est un répertoire racine, mais je voudrais inclure dans ma boucle for, un sous-répertoire donc un truc du genre "repertoire3/sous-repertoire", mais ça ne marche pas.
Ma boucle est du genre :
for repertoire1 repertoire2 repertoire3/sous-repertoire repertoire4 repertoire5
do
je veux qu'il me traite repertoire1 repertoire2 sous-repertoire (du repertoire3) repertoire4 etc.
Merci d'avance. Francois
Hors ligne
#2 Le 08/03/2021, à 19:17
- kamaris
Re : Boucle for do avec des noms de répertoires
Il vaudrait mieux que tu postes ton véritable code (entre balises code : <> dans la barre d'outils), car dit comme ça, ça devrait marcher.
Dernière modification par kamaris (Le 08/03/2021, à 19:17)
Hors ligne
#3 Le 08/03/2021, à 19:24
- pingouinux
Re : Boucle for do avec des noms de répertoires
Bonsoir,
for rep in repertoire1 repertoire2 repertoire3/sous-repertoire repertoire4 repertoire5
do
echo "$rep"
done
Hors ligne
#4 Le 08/03/2021, à 20:15
- arvernes
Re : Boucle for do avec des noms de répertoires
Ben mon code est celui que vous avez représenté :
for i in repertoire1 repertoire2 repertoire3/sous-repertoire repertoire4
do
repertoire_a_copier="$i"
etc...
j'ai contourné le pb en mettant mon repertoire3/sous-repertoire à l'extérieur de la boucle en faisant le même traitement que pour les autres répertoires, mais cela aurait été mieux que je n'ai pas à faire cette manip. Francois
Hors ligne
#5 Le 08/03/2021, à 20:29
- Sciensous
Re : Boucle for do avec des noms de répertoires
y-a-t-il un espace dans le sous-répertoire ?
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#6 Le 08/03/2021, à 20:38
- arvernes
Re : Boucle for do avec des noms de répertoires
non, je ne mets aucun caractère accentué, ni d'espace dans les noms de fichiers et/ou de répertoires. Si je dois mettre "ma compta", j'appelle le fichier ou le répertoire "ma_compta".
Hors ligne
#7 Le 08/03/2021, à 20:55
- Watael
Re : Boucle for do avec des noms de répertoires
salut,
montre-nous le déroulement de la boucle, avec un simple echo.
et indique-nous les messages d'erreur, parce que "ça marche pas" n'en est pas un. ou alors le développeur a de l'humour.
Dernière modification par Watael (Le 08/03/2021, à 23:14)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#8 Le 08/03/2021, à 22:59
- MicP
Re : Boucle for do avec des noms de répertoires
Bonjour
for i in repertoire1 repertoire2 repertoire3/sous-repertoire repertoire4 do repertoire_a_copier="$i" etc...
La commande etc... n'existe pas sur mon système.
Ou alors, c'est le développeur qui a écrit une fonction ayant ce nom,
et il nous faudra voir les lignes de code de cette fonction (je trouve qu'il a vraiment beaucoup d'humour ce développeur )
il manque aussi la fin de boucle :
done
et sans cette fin de boucle, la boucle ne pourra jamais fonctionner.
Pour qu'on puisse t'aider,
donne nous tout ce qu'il y a depuis for jusqu'à done
Sinon il nous sera impossible de trouver d'où vient le problème,
à moins qu'un aidant ait encore une boule de cristal en état de fonctionnement.
Merci.
Dernière modification par MicP (Le 08/03/2021, à 23:02)
Hors ligne
#9 Le 09/03/2021, à 06:06
- arvernes
Re : Boucle for do avec des noms de répertoires
Voilà une partie du code, tout au moins la partie de la boucle. Pour ce qui est du "etc", bien sur que non, ce n'est pas du code ;-) c'était pour éviter de tout remettre ici. Les codes couleurs sont du genre ${On_IYellow} ${bldred} et là je n'ai pas repris tous les codes couleurs que j'ai dans le script, car ça n'a pas d'intérêt.
for i in repertoire1 repertoire2 repertoire3/sous_repertoire repertoire4 repertoire5 repertoire6
do
repertoire_a_copier="$i"
echo ""
echo -e "$colored_line"
echo -e " ${On_IYellow}${bldred}On va s'occuper du répertoire .............: \"\033[1;34m$repertoire_a_copier${bldred}\"${txtrst}"
echo -e "$simple_colored_line"
echo ""
echo -e " \033[1;36mVoulez-vous vérifier et synchroniser le répertoire :\033[0m"
echo -e -n " \033[1;36m\"\033[1;34m$repertoire_a_copier\033[1;36m\"? \033[1;33mo\033[1;35m/\033[1;33mN\033[1;35m (Non par défaut)\033[1;37m \033[1;36m: \033[0m"
read "on_veut_verifier_ce_repertoire"
if [[ $on_veut_verifier_ce_repertoire = "o" ]] || [[ $on_veut_verifier_ce_repertoire = "O" ]] ; then
echo ""
echo -e "$simple_colored_line"
echo -e " ${bldred}On va synchroniser le répertoire ..........: \"\033[1;34m$repertoire_a_copier${bldred}\"${txtrst}"
echo ""
# echo -e " ${bakblk}${bldgrn}rsync -r -t -p -o -g -v --progress --delete -c -s $localisation_generale_des_repertoires_source_a_copier/$repertoire_a_copier $repertoire_de_destination_des_repertoires_synchronises${txtrst}"
# echo ""
rsync -r -t -p -o -g -v --progress --delete -c -s $localisation_generale_des_repertoires_source_a_copier/$repertoire_a_copier $repertoire_de_destination_des_repertoires_synchronises
echo -e "$simple_colored_line"
echo ""
read -t $temps_attente
else
echo ""
echo -e "$simple_colored_line"
echo -e " ${bldred}On n'a pas voulu s'occuper du répertoire ..: \"\033[1;34m$repertoire_a_copier${bldred}\"${txtrst}"
echo -e "$simple_colored_line"
echo ""
read -t $temps_attente
fi
done
dans mon script vu que repertoire3/sous_repertoire ne faisait pas ce que je voulais, je l'ai supprimé dans mon script pour le traiter séparemment.
francois
Hors ligne
#10 Le 09/03/2021, à 10:36
- MicP
Re : Boucle for do avec des noms de répertoires
Bonjour
Merci pour ce retour.
Tu as déjà constaté qu'il y avait un problème avec repertoire3/sous-repertoire
et qu'en le supprimant de la liste, ton script fonctionnait.
Donc, pour pouvoir trouver la ou les lignes de commandes qui ne vont pas,
dans un premier temps et comme tu l'as déjà fait pour certaines lignes de ton script,
tu pourrais commenter certaines lignes de commandes.
Hors ligne
#11 Le 09/03/2021, à 13:25
- Watael
Re : Boucle for do avec des noms de répertoires
on n'a toujours pas les messages d'erreur !
en attendant :
for aCopier in rep1 rep2...
do
...
if [[ $on_veut_verifier_ce_repertoire == [oO] ]]
then
rsync ... "$origine/$aCopier" ...
Dernière modification par Watael (Le 09/03/2021, à 13:29)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#12 Le 09/03/2021, à 18:23
- arvernes
Re : Boucle for do avec des noms de répertoires
Non, je n 'ai pas de message d'erreur, mais c'est simplement que le rsync ne fonctionne pas sur le sous-répertoire dans le cadre de cette boucle for/do/done, mais elle me faisait la synchro sur le répertoire complet. Je peux vivre avec, mais j'ai posé la question dans le forum pour voir si je ne me trompais pas dans ma manière d'écrire pour ce sous-répertoire. Francois
Hors ligne
#13 Le 09/03/2021, à 18:46
- Watael
Re : Boucle for do avec des noms de répertoires
en gros, la boucle ne sert qu'à valider les répertoires à sauvegarder avec rsync, donc on pourrait simplifier :
#!/bin/bash
repertoires=( rep1 rep2 rep3/sous-rep re4 )
ailleurs='nnn.nnn.nnn.nnn'
destination="/la-bas"
for rep in "${repertoires[@]}"
do
read -p "sauvegarder \"$rep\" ? [o/N] "
[[ $REPLY == [oO] ]] && toSave+=( "$rep" )
done
echo "les répertoires suivants vont être sauvegarder :"
printf '%s\n' "${toSave[@]}"
read -p "proceed ? [o/N] "
[[ $REPLY == [oO] ]] && rsync <options...> "${toSave[@]}" "$ailleurs:$destination"
?
Dernière modification par Watael (Le 09/03/2021, à 19:50)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#14 Le 09/03/2021, à 18:51
- MicP
Re : Boucle for do avec des noms de répertoires
Il manque un &
il faudrait :
[[ $REPLY == [oO] ]] && toSave+=( "$rep" )
Hors ligne
#15 Le 09/03/2021, à 18:56
- Watael
Re : Boucle for do avec des noms de répertoires
corrigé. merci.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#16 Le 09/03/2021, à 19:15
- MicP
Re : Boucle for do avec des noms de répertoires
C'est toujours plus facile de trouver les fautes de frappe des autres,
quand on recherche les siennes, on y repasse toujours sans les voir.
Dernière modification par MicP (Le 12/03/2021, à 10:21)
Hors ligne
#17 Le 12/03/2021, à 08:21
- arvernes
Re : Boucle for do avec des noms de répertoires
Merci. Cette solution me va bien. Il faut maintenant que je la comprenne, mais avec votre exemple ça devrait le faire. Merci.
Hors ligne
#18 Le 05/07/2021, à 18:35
- arvernes
Re : Boucle for do avec des noms de répertoires
Je reviens sur mon ancien message, car rsync me va vraiment bien ça marche nickel. Ce que j'aimerai, c'est synchroniser un fichier qui s'appelle "msgFilterRules.dat" entre mes ordinateurs. Le pb c'est que ce fichier se trouve pour un ordinateur dans /.thunderbird/26584u2y.default/Mail/pop.free.fr/, dans un autre ordinateur il est dans /.thunderbird/5894yu1a/Mail/pop.free.fr/ , dans un autre dans /.thunderbird/jveklsqm12ub/Mail/pop.free.fr/
En plus dans /Mail j'ai plusieurs sous-dossiers car ayant plusieurs comptes mail, et donc j'ai plusieurs fichiers "msgFilterRules.dat" chacun dans son propre sous-dossier.
Mon truc c'est si le fichier "msgFilterRules.dat" a changé dans un ordinateur, rsync ou autre va chose va me le copier sur un disque usb, et lorsque j'aurais l'autre ordinateur sous la main, je fais un rsync dans un autre sens pour qu'il me copie ce fichier dans le bon sous-dossier de cet autre ordi. Hmmm, je ne sais pas si je suis bien clair.
Est-ce possible ? si oui comment ? Merci d'avance. Francois
Hors ligne
#19 Le 05/07/2021, à 21:22
- Watael
Re : Boucle for do avec des noms de répertoires
tu devrais ouvrir une nouvelle discussion, car, là, on sort du cadre de « Boucle for do avec des noms de répertoires »
Connected \o/
Welcome to sHell. · eval is evil.
En ligne