Forum Programmation.shell Lister les fichiers dans un repertoire

Posté par  .
Étiquettes : aucune
0
29
nov.
2004
Voila j'utilise un script bash pour deplacer les fichiers d'un repertoire vers in autre, comme je le fais pour plusieurs repertoire j'ai fait un tableau:

repertoire[1]="/home/tata/"
repertoire[2]="/home/toto/"

index=1

while [ -n "${repertoire[$index]}" ]; do
for fichier in $repertoire/*f
do
blablabla...
done
let index=index+
done

Cependant si il n'y a pas de fichiers dans /home/tata/ mon script sort du while avec un message d'erreur et ne veux pas passer au repertoire suivant.

move.sh: no matches found: /home/tata/* [3]

Comment faire pour ne pas generer d'erreur si il n'y as pas de fichier et ne pas sortir du while?
  • # Erreur ou ?

    Posté par  (site web personnel) . Évalué à 3.

    $ for i in /tmp/mnt/*; do echo $i; done
    /tmp/mnt/*

    Quand il n'y a rien a remplacer ca laisse l'*, donc c'est pas plutot dans le blablabla que ca foirerait ?
  • # Erreur sur la ligne du for

    Posté par  . Évalué à 1.

    L'erreur est a la ligne 3 (celle du for ...) , si je vire tous le blabla j'obtient quand meme l'erreur. En fait il sort seulement du while car j'ai d'autre code apres le while et celui ci est bien effectue.
  • # [$index]

    Posté par  . Évalué à 4.

    salut, ne manquerait-il pas un [$index] dans la ligne du for ?

    while [ -n "${repertoire[$index]}" ]; do

    for fichier in $repertoire[$index]/*f

    do

    blablabla...

    done

    let index=index+

    done
  • # "shopt" nullglob

    Posté par  . Évalué à 3.

    Salut

    Oui c'est énervant ces expansions de fichiers qui renvoient le "*" tel quel s'il ne trouve rien !
    Mais c'est paramétrable, $ man bash et cherche "shopt" qui permet de changer certains comportements internes du shell, en particulier le "globbing":

    nullglob: If set, bash allows patterns which match no files (see Pathname Expansion above) to expand to a null string, rather than themselves.
    ("shopt -s option" pour activer, "shopt -u option" pour désactiver)

    Ce qui me donne par exemple:

    $ ls *.gif *.jfkshkjg
    ls: *.jfkshkjg: Aucun fichier ou répertoire de ce type
    toto.gif
    $ shopt -s nullglob
    $ ls *.gif *.jfkshkjg
    toto.gif

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.