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 Pascal Terjan (site web personnel) . Évalué à 3.
/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 Gazel . Évalué à 1.
# [$index]
Posté par Bastien Mourgues . Évalué à 4.
while [ -n "${repertoire[$index]}" ]; do
for fichier in $repertoire[$index]/*f
do
blablabla...
done
let index=index+
done
# "shopt" nullglob
Posté par daggett . Évalué à 3.
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.