Boucle for shell qui ne traite qu'une seule valeur [Résolu]

Signaler
Messages postés
3
Date d'inscription
jeudi 13 février 2020
Statut
Membre
Dernière intervention
19 février 2020
-
zipe31
Messages postés
38398
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 février 2020
-
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.

3 réponses

Messages postés
38398
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 février 2020
4 664
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 ..
).

;-))
Messages postés
28162
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
21 février 2020
5 945
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.

zipe31
Messages postés
38398
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 février 2020
4 664
Salut JP,

Grilled ;-))
jee pee
Messages postés
28162
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
21 février 2020
5 945 > zipe31
Messages postés
38398
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 février 2020

Salut ;-)
Messages postés
3
Date d'inscription
jeudi 13 février 2020
Statut
Membre
Dernière intervention
19 février 2020

Meeeerciiii pour votre aide !!! ça fonctionne parfaitement :D
zipe31
Messages postés
38398
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 février 2020
4 664
De rien.

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