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

Linux Discussion :

Problème sur un find en ksh


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Par défaut Problème sur un find en ksh
    Salut,

    Alors j'espere ne pas m'etre trompé de forum.

    J'ai un script en ksh dans lequel je fais un chtit "find" cf ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find $rep -name nomfichier\.\*\([0-9]\)\.\*\([0-9]\)
    Donc c'est pour trouver un fichier possédant deux chaînes de caractères encadrés par des points.

    Le problèmes est que les ( ) servent de fonctions particulières dans "find" et que même le \ devant n'annule pas cette fonction.

    J'ai testé avec " et ' ca ne change rien, il ne me trouve pas le fichier.

    Si je ne met pas les parenthèses, il trouve le fichier mais cela n'est pas la bonne syntaxe.....

    Si vous avez une solution je suis preneur.

    Lebowsky.

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Salut,

    La syntaxe pour trouver "entre deux points" c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find /chemin -name "*.*.*"
    en KSH

    relis le man page de find ton bricolage avec les ([\ etc.... expressions régulières n'ont absoluement aucun interet dans le cadre d'un critère unique de recherche, c'est même une mauvaise méthode de les utiliser dans ce cas.

    De plus tu utilises les caracteres génériques * et/ou ? le nom de fichier est alors obligatoirement utilisé entre doubles quotes (").

    Ce qui t'empeche là aussi d'utiliser la syntaxe d'expréssion régulière.

    Si tu veux faire une recherche sur la chaine *chiffre* placée entre deux points alors utilises :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /chemin -name "*.*[0-9]*.*"
    _______________

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    /tmp>ksh
    # touch titi.5.6.txt toutou.a55a.txt
    # find . -name "*.*[0-9]*.*"
    ./toto.5.6.txt
    ./titi.5.6.txt
    ./toutou.a55a.txt
    # find . -name "*.*.*"
    ./toto.5.6.txt
    ./mail.boxes.log
    ./titi.5.6.txt
    ./toutou.a55a.txt
    #rm titi.5.6.txt toutou.a55a.txt
    # exit
    /tmp>

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    tu peux soit faire un grep
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find . | grep rexexp
    soit, si ton find le permet, utiliser regex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find . -regex '.*/tonexpressionregulière'

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Par défaut
    Merci pour les réponses.

    frp31
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /chemin -name "*.*[0-9]*.*"
    Le truc c'est que ta recherche de fichier dans ce cas te donne tout les fichiers qui possèdent un chiffre au milieu d'une chaîne de caractère quelconque.

    Ma recherche correspond à un nom de fichier suivis de chiffre et encore de chiffre.
    Si un fichier de même nom possède des lettres il ne faut pas que je le remonte donc je ne peux pas fonctionner avec ta méthode.

    En shell la recherche d'une expression régulière composé de chiffre s'écrivant *([0-9]) j'ai tenté la recherche avec cette méthode.

    Si je vire les () je remonte les fichiers terminé par un chiffre dans mon cas ci dessus. De cette manière cela fonctionne, cet à dire que je ne vois que les fichiers désiré, mais cela n'est pas la bonne syntaxe.

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    ah ok...
    mais là tu ne pouras pas je pense le faire en une seule passe
    il va falloir monter une "serie de commandes" pour que ça prenne en compte toutes les conditions que tu demande par exemple comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    /bin>ksh
     
    /tmp>for i in `find . -type f -name "*[0-9]*" -exec ls -l {} \; | awk  '{print $9}' | cut -d"/" -f2 `
    >  do
    >  if [ `ls $i | awk -F. '{print $2}'|grep -v [a-z] | grep -v [A-Z]| wc -c` -ne 0 ]
    >  then
    >  ll $i
    >  fi
    >  done
     
    -rw-rw-rw-   1 root     system         0 Jul 28 14:31 toto.55.t
    -rw-rw-rw-   1 root     system         0 Jul 28 14:36 toto.45.T
     
    /tmp>ll toto*
    -rw-rw-rw-   1 root     system         0 Jul 28 14:36 toto.45.T
    -rw-rw-rw-   1 root     system         0 Jul 28 14:45 toto.4ER4.t
    -rw-rw-rw-   1 root     system         0 Jul 28 14:31 toto.55.t
    -rw-rw-rw-   1 root     system         0 Jul 28 14:31 toto.5a5.t
    -rw-rw-rw-   1 root     system         0 Jul 28 14:45 toto.tutu.44.t
     
    /tmp>rm toto*
     
    /tmp>exit
     
    /bin>
    ça marche quelque soit le nombre de chiffre entre les deux caracteres "."

    Mais alors là attention ça ne marche que si ta valeur chifrée est entre les deux premiers caracteres "." donc le fichier toto.tutut.44.t n'a pas été trouvé

    Bien sur tu peux eviter la serie de commande casse pied à taper par un script...

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Par défaut
    Merci beaucoup pour ca.

    Je le testerais la semaine prochaine.

Discussions similaires

  1. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  2. Problème sur fiche MDIchild
    Par nivet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/01/2004, 08h07
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 22h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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