Bash test [[ expression regulière
Résolu
sbouli
Messages postés
208
Statut
Membre
-
sbouli Messages postés 208 Statut Membre -
sbouli Messages postés 208 Statut Membre -
Bonjour,
J'ai une variable $fich_name_check contenant un nom de fichier, Je voudrais déterminé si ce nom de fichier contient .gz.
je dis bien contient à tout endroit de la chaine, pas seulement comme extension ...
exemple : mail.log.1.gz.2007-02-39
if $fich_name_check =~ .gz. # ici il faut la bonne expression régulière ....
then
echo "oui le nom de fichier contient bien .gz."
else
echo "non il ne le contient pas"
fi
Je ne sais pas combien de termes avec des . peuvent séparer le .gz. ni le suivre ....
Au secours ... o:)
Stéphane
J'ai une variable $fich_name_check contenant un nom de fichier, Je voudrais déterminé si ce nom de fichier contient .gz.
je dis bien contient à tout endroit de la chaine, pas seulement comme extension ...
exemple : mail.log.1.gz.2007-02-39
if $fich_name_check =~ .gz. # ici il faut la bonne expression régulière ....
then
echo "oui le nom de fichier contient bien .gz."
else
echo "non il ne le contient pas"
fi
Je ne sais pas combien de termes avec des . peuvent séparer le .gz. ni le suivre ....
Au secours ... o:)
Stéphane
6 réponses
-
Salut,
Essaie comme ça :echo "$fich_name_check" | grep -q '\.gz\.' if [ "$?" = "0" ] then echo "oui le nom de fichier contient bien .gz." else echo "non il ne le contient pas" fi
;-))
-
je rebondis sur ce vieux post car je pensais faire un peu la même chose avec une liste de fichier exclus sous la forme :
egrep -q -e "${IGNORE_FILES_ALERTE}" <<<${fich##*/}
avec par exemple
IGNORE_FILES_ALERTE="access component toto.log"
et donc dans une boucle la valeur de ${fich} qui tourne sur les fichiers du répertoire :
for fich in 'ls -1 ${LOGS_PATH}/*.log 2>/dev/null' do egrep -q -e "${IGNORE_FILES_ALERTE}" <<<${fich##*/} retval=$? if [[ ${retval} = 0 ]] then echo "je ne traite pas ce fichier basename ${fich}, il fait parti des exceptions aux alertes" else echo "envoi d'une alerte pour ${fich}" fi done
et ça ne fonctionne pas ....
Stéphane -
en ce qui concerne le problème original, une regex n'est pas indispensable (grep non plus)
if [[ $fich_name_check == *.gz ]]; then
etc
ICI, que peut valoir ${fic##*/} est exactement 'access component toto.log', ou autrechoseif [ "${fic##*/}" = "$IGNORE_FILES_ALERTE" ]si il y a besoin de plus, précise le. -
effectivement il semble que je me sois expliqué comme une chèvre (pov bête) ...
Le but : avoir une liste de nom de fichier à exclure :
IGNORE_FILES_ALERTE="access component toto.log"
donc je ne dois pas traiter le fichier s'il s'appel access ou component ou toto.log
je boucle donc sur mon rep (oui je sais dans le code je sélectionne déjà que les .log ...) et si le nom de fichier est présent dans la liste ben je passe au suivant ...
Stéphane -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
IGNORE_FILES_ALERTE="access component toto.log" for f in ./*; do if [[ ! ${f##*/} =~ ${IGNORE_FILES_ALERTE// /|} ]]; then echo $f; fi doneça devrait marcher sous réserve de ne pas utiliser sh, mais bash, ou ksh
en bashshopt -s extglob for f in ./*; do if [[ ! ${f##*/} == +(${IGNORE_FILES_ALERTE// /|}) ]]; then echo $f; fi done -
Bonjour,
Je me permet de relancer le sujet, la version :egrep -q -e "${fich##*/}" <<<${IGNORE_FILES_ALERTE}
fonctionne parfaitement, mais depuis j'ai découvert qu'il fallait que je détecte aussi des portions de nom de fichier.
Par exemple si la liste IGNORE_FILES_ALERTE vaut = access toto.log titi.php
il faut que je détecte les fichiers nommés : access_nom_bidon_de_site aussi comme contenant le mot clef access ...
et franchement là je vois pas ....
Merci pour votre aide.
PS : je ne sais pas si la question à déjà été abordé mais il va bien JIPICY ? (ou il a changé de pseudo ?)