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 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. smile

Dernière modification par Watael (Le 08/03/2021, à 23:14)


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

Hors ligne

#8 Le 08/03/2021, à 22:59

MicP

Re : Boucle for do avec des noms de répertoires

Bonjour

Dans son message #4, arvernes a écrit :
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 smile)
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.

Hors 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.

Hors 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.

Hors 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. smile

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.

Hors ligne