Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/01/2011, à 07:29

YannUbuntu

[Resolu] Test sur existence d'un dossier

Bonjour
J'ai les sous-dossiers suivants dans un dossierA :
/dossierA/201101_182334untruc
/dossierA/201101_191300unautretruc
/dossierA/201008_191300encoreunautretruc
...
donc de type "$(date +'%Y%m%d_%H%M%S')$quelquechose"

Je cherche a lancer un script a une seule condition : qu'il n'existe pas le sous-dossier "/201101_1913**untruc" , les ** pouvant être n'importe-quelle chaine de caractères, comment puis-je faire cela ?

pour info je pensais a quelquechose comme :

if [ ! -d /dossierA/201101_1913*untruc ];then monscript; fi

ou bien du type

if [ ! "$(echo "$(dir /dossierA)" | grep "201101_1913*untruc")" ];then monscript; fi

mais le symbole étoile ne semble pas faire ce que je veux dans ces 2 cas...

Dernière modification par YannUbuntu (Le 20/01/2011, à 10:42)


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne

#2 Le 19/01/2011, à 09:38

iuchiban

Re : [Resolu] Test sur existence d'un dossier

tu peux faire :

if [[ ! $(ls $(date +'%Y%m%d_%H%M%S')* 2>/dev/null) ]]
then
  echo "Pas de répertoire"
else
  echo "Y'a un répertoire"
fi

En gros :
- s'il existe des répertories, le ls va les lister et le code retour est 0
- s'il n'y a pas de répertoire, le code retour de ls est > 0


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#3 Le 19/01/2011, à 09:40

Totor

Re : [Resolu] Test sur existence d'un dossier

Salut,

shopt -s nullglob
[[ /dossierA/201101_1913*untruc/ ]] || echo "il n'existe pas de dossier sous la forme  /dossierA/201101_1913\*untruc/"

-- Lucid Lynx --

Hors ligne

#4 Le 19/01/2011, à 11:15

YannUbuntu

Re : [Resolu] Test sur existence d'un dossier

merci pour vos propositions, mais elles ne fonctionnent pas chez moi.
Je me suis peut-être mal exprimé : dans un dossier donné, je cherche à savoir s'il existe au moins un sous-dossier dont le nom commence par une chaine de caractères X ("201101_1913" par exemple) et finit par une chaine de caractère Y ("untruc" par exemple). Entre les deux il n'y a que 2 caractères (les secondes).

Dernière modification par YannUbuntu (Le 19/01/2011, à 11:17)


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne

#5 Le 19/01/2011, à 11:53

Totor

Re : [Resolu] Test sur existence d'un dossier

oui, c'est bien ce que j'ai compris et la solution que j'ai donné répond à la question...
poste ton script, des logs (avec l'option -x)... on verra ce qui cloche


-- Lucid Lynx --

Hors ligne

#6 Le 19/01/2011, à 13:17

ehmicky

Re : [Resolu] Test sur existence d'un dossier

Ca ne marche pas je crois :

$ shopt -s nullglob
$ ls
aabbcc
$ [[ zz*yy ]] && echo "oh"
oh

Je crois que c'est parce que le test [[ ]] ne peut utiliser le globbing que pour les tests == et !=, mais je suis pas sûr :-\

Sinon, tu peux essayer ça :

shopt -s nullglob
[[ $(echo /dossierA/201101_1913*untruc/) ]] || echo "il n'existe pas de dossier sous la forme  /dossierA/201101_1913\*untruc/"

Dernière modification par ehmicky (Le 19/01/2011, à 13:44)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#7 Le 19/01/2011, à 14:32

Totor

Re : [Resolu] Test sur existence d'un dossier

Alors ... au temps pour moi, désolé hmm

bash n'effectue pas la complétude dans ce contexte et du coup, la chaine est considérée comme non null.

pour éviter de lancer un autre processus, on peut exploiter la builtin compgen :

comgen -G '/dossierA/201101_1913*untruc/' >& /dev/null || {
..traitement lorsqu'il n'existe pas de sous dossier
}

Note: il est important que la valeur de la variable et l'* soit protégées.
Donc, si 201101_1913 est la valeur d'une variable, il faut procéder ainsi :

variable="201101_1913"
comgen -G "${variable}"\*untruc/ >& /dev/null || {
..traitement lorsqu'il n'existe pas de sous dossier
}
# ou encore
comgen -G "${variable}"'*untruc/' >& /dev/null || {
..traitement lorsqu'il n'existe pas de sous dossier
}
# ou encore, plus simplement
variable="201101_1913*untruc"
comgen -G "${variable}" >& /dev/null || {
..traitement lorsqu'il n'existe pas de sous dossier
}

edit : ajout d'une altérnative

Dernière modification par Totor (Le 19/01/2011, à 14:34)


-- Lucid Lynx --

Hors ligne

#8 Le 20/01/2011, à 03:37

YannUbuntu

Re : [Resolu] Test sur existence d'un dossier

Merci pour vos précisions.
Pour info , "201101_1913" et "untruc" sont deux variables.

Je vais essayer.


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne

#9 Le 20/01/2011, à 03:58

YannUbuntu

Re : [Resolu] Test sur existence d'un dossier

La solution de ehmicky semble fonctionner (même en remplacant les chaines de caractères par des variables), mais uniquement s'il y a une étoile. S'il n'y a pas d'étoile :

shopt -s nullglob
[[ $(echo /tmt) ]] || echo "il n'existe pas de dossier sous la forme  /tmt"

ne m'affiche rien (alors qu'il n'existe pas de dossier "tmt").

Totor, tes propositions ne semblent pas fonctionner :

comgen -G '/t*p/' >& /dev/null || {
echo "pas de /t*p"
}

m'affiche "pas de /t*p" (alors que le dossier /tmp existe).

Idem pour :

a="t"
comgen -G "${a}"'*p/' >& /dev/null || {
echo "pas de /t*p"
}

et

a="t"
comgen -G "${a}"'*p/' >& /dev/null || {
echo "il n'existe pas de sous dossier /t*p"
}

Dernière modification par YannUbuntu (Le 20/01/2011, à 03:58)


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne

#10 Le 20/01/2011, à 10:20

Totor

Re : [Resolu] Test sur existence d'un dossier

mad Je suis un vrai boulet !!!!!!! roll

Totor a écrit :

[...]on peut exploiter la builtin compgen :

Totor a écrit :

comgen -G '/dossierA/201101_1913*untruc/' >& /dev/null || {
..traitement lorsqu'il n'existe pas de sous dossier
}

C'est donc :

variable="${variable1}*${variable2}"

compgen -G "${variable}" >& /dev/null || {
..traitement lorsqu'il n'existe pas de sous dossier
}

-- Lucid Lynx --

Hors ligne

#11 Le 20/01/2011, à 10:41

YannUbuntu

Re : [Resolu] Test sur existence d'un dossier

merci beaucoup !  smile

Pour votre info d'ailleurs, cette solution semble permettre aussi d'utiliser plusieurs champs * , par exemple:

variable="/*edi*"
compgen -G "${variable}" >& /dev/null || {
echo "il n'existe pas de sous dossier /*edi*"
}

ou bien:

variable="/*m*d*a*"
compgen -G "${variable}" >& /dev/null || {
echo "il n'existe pas de sous dossier /*m*d*a*"
}

Dernière modification par YannUbuntu (Le 20/01/2011, à 10:42)


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne

#12 Le 20/01/2011, à 13:14

Totor

Re : [Resolu] Test sur existence d'un dossier

attention à bien mettre un / à la fin de ton pattern :

variable="m*d*a/"

Sans cela, s'il y a des fichiers correspondant à ton pattern mais pas de dossier, ton traitement sera faussé


-- Lucid Lynx --

Hors ligne

#13 Le 20/01/2011, à 13:30

YannUbuntu

Re : [Resolu] Test sur existence d'un dossier

merci pour la precision smile


à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison

Hors ligne

#14 Le 21/01/2011, à 01:06

ehmicky

Re : [Resolu] Test sur existence d'un dossier

Je crois que cela marche aussi :

shopt -s failglob
var="/*m*d*a*"
{ : $var/;} 2> /dev/null\
  || echo "il n'existe pas de sous dossier correspondant au pattern $var"

Dernière modification par ehmicky (Le 21/01/2011, à 10:43)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne