IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Expression régulière et nom de fichier


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Points : 39
    Points
    39
    Par défaut Expression régulière et nom de fichier
    Bonjour,
    Je bute sur un problème tout bête d'expression régulière et de variable..
    J'aimerais récupérer un nom de fichier pour pouvoir l'ensuite l'export. J'ai un répertoire avec plusieurs fichiers dont un qui m’intéresse qui est sous la forme : test_XXXX.txt où XXXX est une suite de nombres.
    Voici le bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    cd pathToGo
    if [ -n "$(find . -maxdepth 1 -name 'test_[0-9]{4}.txt')" ] 
    then 
    echo OK
    else 
    echo KO
    fi
    Je ne sais pas comment récupérer le fichier trouver par find pour le mettre dans une variable. De plus mon if ne marche pas..
    Merci !

  2. #2
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Bonsoir,

    Sans avoir testé, j'essayerai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cd pathToGo
    mavar=$(find . -maxdepth 1 -name 'test_[0-9]{4}.txt')
    echo $mavar
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Bonjour,

    -name ne gère pas les regex; il y a pour ça des options -regex et -iregex.

    après, find est-il indispensable :
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    shopt -s nullglob
    test -f ./test_[0-9][0-9][0-9][0-9].txt && echo "le fichier existe" || echo "pas de fichier"
    je n'ai pas encore trouvé comment faire que ça fonctionne avec des noms de fichiers qui contiennent des espaces
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Hello.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cd MonRep
    MonFic=$(ls -1 test_[0-9][0-9][0-9][0-9].txt)

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Bonjour, et bienvenue,

    ON N'UTILISE PAS ls DANS UN SCRIPT !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour, et bienvenue,

    ON N'UTILISE PAS ls DANS UN SCRIPT !
    Bonjour,

    Euh, et pourquoi donc?

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour et Bienvenue,

    En y mettant les formes, si on peut éviter (et on peu très souvent) d'utiliser 'ls' dans un script, on le fait.
    Ici, dans ton exemple, on peut vraiment l'éviter:
    Pour exemple, voici ce que j'ai dans mon répertoire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ls
    test_2014.txt  test_bar.txt  test_foo.txt  test_xxx.txt
    et voici comment affecter le nom du fichier simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ MonFic=test_[0-9][0-9][0-9][0-9].txt
    $ echo $MonFic 
    test_2014.txt
    Mais, je te rassure, pour le cas initial, il n'y a pas besoin non plus de 'find'

    Après, comme on l'a déjà montré dans d'autres post, on pourrait toujours se passer de 'ls' (surtout sous linux), mais bon, il ne faut pas non plus compliquer inutilement un script juste pour éviter de l'utiliser.
    Cordialement.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ MonFic=test_[0-9][0-9][0-9][0-9].txt
    $ echo $MonFic 
    test_2014.txt
    Oui, cette solution est sympa et encore plus simple.

    Après concernant la question spécifique d'éviter -ou pas- ls dans un script, j'aimerais avoir une explication argumentée

    Nous sommes bien d'accord que le recours aux commandes externes au shell est idéalement à proscrire/limiter au maximum, si celà est possible (fonctionnalités disponibles uniquement via les commandes internes du shell, avec un ratio coût/complexité acceptable).

    Maintenant si on me dit d'éviter ls en utilisant précédemment find.. comment dire ^^

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    ls est inutile dans un script :
    • c'est l'interpréteur qui effectue le développement des chemins.
    • la sortie de son format long est instable (certains éléments peuvent apparaître ou pas), alors il est préférable d'utiliser stat, dont on peut paramétrer à volonté la sortie (éléments et format).


    entre utiliser une boucle while pour parcourir correctement la liste des noms de fichiers produite pas ls (auquel est passé un développement de chemins en argument), et une boucle for itérant sur le développement des chemins, je choisis la dernière.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'expression régulière pour parser un fichier
    Par lionelus dans le forum Bioinformatique
    Réponses: 4
    Dernier message: 12/06/2015, 11h29
  2. Expressions Régulières et nom de fichiers
    Par Worm00 dans le forum SL & STL
    Réponses: 1
    Dernier message: 05/10/2012, 12h25
  3. Expression réguliere et nom de fichier
    Par delilou dans le forum Général Java
    Réponses: 4
    Dernier message: 24/03/2011, 09h39
  4. Réponses: 93
    Dernier message: 15/04/2009, 15h34
  5. Expression régulière pour récupérer le nom d'un fichier
    Par calimero2611 dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2006, 19h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo