Boucle for shell qui ne traite qu'une seule valeur

Résolu/Fermé
medou922 Messages postés 3 Date d'inscription jeudi 13 février 2020 Statut Membre Dernière intervention 19 février 2020 - Modifié le 13 févr. 2020 à 16:59
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 13 févr. 2020 à 17:36
Bonjour à tous,

Pouvez-vous m'aider svp?
J'écris actuellement un script qui liste les sous dossiers d'un repertoire, et qui effectue des opérations dans ces fichiers (rm , cp)...
J'ai un résultat, mais ma boucle s'arrête après le premier sous dossier et ne continue pas.
Il lit bien le nom du sous dossier, mais s'arrête net après.
Voici mon code:


#! /bin/bash


dossier=$(find . -maxdepth 1 -type d \( ! -iname ".*" \) -exec basename {} \; ) 
#count=$(find $dossier -type d | wc -l)

echo les dossiers a traiter sont $dossier
                echo ""

for  i in $dossier
do
echo vous etes dans le dossier : $i
  if [[ -d $i ]]
then
 echo Le repertoire $i existe
                cd  $i && echo $PWD
                echo ""
                echo ""
                rm -rf fichier1 fichier2
        echo $?

        echo ""
      
        cp -v /data2/new/* . 
        echo $?

        else
        echo "Il n y a plus de dossier à traiter"
fi;
done


Le script s'exécute parfaitement sur le premier dossier, mais s'arrête juste après avoir lu le nom du second dossier, sans faire les traitement.

Merci d'avance pour votre aide.
A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
13 févr. 2020 à 17:15
Salut,

C'est bien de rentrer dans un répertoire (
cd  $i && echo $PWD
, au passage je préférerai
cd  $i && pwd
), mais il faut penser à en sortir quand on a fini le traitement (
cd ..
).

;-))
1
jee pee Messages postés 40441 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 12 novembre 2024 9 422
Modifié le 13 févr. 2020 à 17:16
Bonjour,

Une suggestion, en traitant le 1er répertoire tu fais un cd pour te positionner dedans, donc à cet endroit, le test -d pour le second dossier à traiter ne le trouve pas.

1
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
13 févr. 2020 à 17:17
Salut JP,

Grilled ;-))
0
jee pee Messages postés 40441 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 12 novembre 2024 9 422 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
13 févr. 2020 à 17:19
Salut ;-)
0
medou922 Messages postés 3 Date d'inscription jeudi 13 février 2020 Statut Membre Dernière intervention 19 février 2020
13 févr. 2020 à 17:32
Meeeerciiii pour votre aide !!! ça fonctionne parfaitement :D
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
13 févr. 2020 à 17:36
De rien.

Au passage :
find . -maxdepth 1 -type d -printf "%P\n"
fait ce que tu veux sans passer par le shell ;-)
0