Script bash qui parcoure les repertoire

Bonjour,
Voici mon script je voudrais savoir ou ce trouve l'erreur de syntaxe :

#!/bin/bash

if [ $# -ne 1 ]
then
echo Usage : $0 dossier
exit 1
elif [ -f $1 ]
then
echo "erreur : l'argument saisi n'est pas un dossier"
exit 1
for i in "$1"/*/**/***
do
if test [ -f "$i" ]
then
./projet.sh "$i"
fi
fi
done

ça me dit: ligne 18 erreur de syntaxe fin prematuré
j'aimerai savoir ou est le probleme

Merci d'avance

2 réponses

  1. salut !
    Essaie de supprimer ta virgule dans le echo, elle n'est pas prise comme un simple caractère.
    0
    1. une virgule? le premier echo ou le deuxieme?
      0
  2. Contributeur
    Salut,

    #!/bin/bash
    
    if [ $# -ne 1 ]
    then
    echo Usage : $0 dossier
    exit 1
    elif [ -f $1 ]
    then
    echo "erreur : l'argument saisi n'est pas un dossier"
    exit 1
    fi
    for i in "$1"/*/**/***
    do
    if test [ -f "$i" ]
    then
    ./projet.sh "$i"
    fi
    done  

    0
    1. Merci pour correction. j'ai reussi à faire un script qui parcourre un repertoire donné en argument et copie tout les fichier qui s'y trouve dans le repertoire SAVE:
      #!bin/bash

      if [ $# -ne 1 ]
      then
      echo usage : $0 dossier
      exit 1
      elif [ -f $1 ]
      then
      echo " Erreur : l'argument saisi n'est pas un dossier"
      exit 1
      fi
      for i in "$1"/*/**/***
      do
      cat $1/*/**/*** >> ~/SAVE/save.txt
      echo "Sauvegarde réussie"
      done

      Seulement voila, le scripte n'etant pas récursif, il ne fonctionnera pas pour les sous-sous-sous-sous....répertoires

      Je voudrai donc savoir le mettre en recursivité

      ps:comment utiliser la balise code sur ce forum?
      0
    2. Contributeur
      @prdnx
      #!/bin/bash

      shopt -s globstar

      if [ $# -ne 1 ]
      then
      echo Usage : $0 dossier
      exit 1
      elif [ -f $1 ]
      then
      echo "erreur : l'argument saisi n'est pas un dossier"
      exit 1
      fi
      for i in ${1}/**
      do
      if test [ -f "$i" ]
      then
      ./projet.sh "$i"
      fi
      done


      Pour les balises il y a le pictogramme <>.

      Sinon :

      <code sh >
      #!/bin/bash

      if [ $# -ne 1 ]
      then
      ...</code>

      Donne :
      #!/bin/bash
      
      if [ $# -ne 1 ]
      then
      ...
      0
    3. Ah oui désolé j'ai oublier de preciser que les command cp,find, globstar et l'option -R sont interdites
      0
    4. Contributeur
      @prdnxAlors il te faut refaire une boucle (une fonction en fait) pour chaque sous-répertoire trouvé, et l'appliquer tant que...
      0
    5. @UnGnUoui c'est exactement ce que j'essaie de faire mais je n'arrive pas.
      0