Aide commande UNIX

Marcel -  
jisisv Messages postés 3678 Statut Modérateur -
Bonjour,

Je voulais savoir comment fesait t on pour cumuler les conditions pour un "find" :
par ex pour trouver les fichiers dont le nom commence par "a" OU par un "e"

j'ai essayé :

find ../rep -name "a*" -o "e*" -print

mais ca ne marche pas
(le probleme est bien ds le cumul des conditions...
cela marche bien si l'on met :

find ../rep -name "a*" -print
)

Merci d'Avance
Marcel!!!

3 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Ben essaye
    chez moi
    johand@horus:~$ ls
    GNUstep  aub           jamal      mmq          sound            tmp
    ISOS     downloads     mbox       perso        src              web
    News     drivers.info  mkurls.pl  public_html  switchlinux.swf
    johand@horus:~$ find  -name "p*" -or -name "m*" -maxdepth 1
    ./perso
    ./mbox
    ./mkurls.pl
    ./mmq
    ./public_html
    

    fonctionne.
    L'option -print ne donne pas le résultat attendu.
    Quelle version de find utilises-tu. Bug dans ma version?
    De toute manière , il faut dans ton cas utiliser deux option -name (ou utiliser des expressions régulières)
    Tu peux aussi essayer:
     find  -name "[mp]*"  -maxdepth 1 

    (j'utilise -maxdepth pour ne pas parcourir les sous-répertoires)

    Johan
    Gates gave you the windows.
    GNU gave us the whole house.(Alexandrin)
    0
  2. bob031 Messages postés 8228 Statut Membre 473
     
    Salut,

    Pour moi les deux commandes me donnent le même résultat.

    # find -name "[mt]*"
    # find -name m* -or -name t* ( ici on peut se passer des guillemets).

    Je suis sous Mandrake 9.0

    bob
    0
  3. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    Pour le print, c'est délicat :)

    Bonche, a plus de copier coller moi :(
    Pour reprendre l'exemple de jisisv:
    en rajoutant un print.
    $ find -name "p*" -o -name "m*" -maxdepth 1 -print
    on retrouve que les noms commencant par 'm'
    en gros, find réagi comme suis.
    Il prend en compte -maxdepth pour la totalitée de l'expression (bizzare d'ailleur, ça pourrait être encore plus souple)
    ensuite, il recherche tout les fichiers commencant par 'p' OU tout les fichier commencant pas 'm' ET il les affiches.
    Le truc c'est qu'il ne prend pas dans le sens attendu (p OU m) ET print mais comme cela p OU (m ETprint)
    dans le man:
      expr1 -o expr2
                  Or; expr2 is not evaluated if expr1 is true.
    Là, on a expr1= -name "p*" et expr2= -name "s*" -print

    Ce qui fait que si l'on souhaite faire un print de tous les fichiers trouvés (inutil là puisque si ce n'est précisé nul part, c'est le comportement par defaut utilisé partout) ou un autre traitement, il faut utiliser:
    $ find -name "p*" -print -o -name "m*" -print -maxdepth 1
    Voilà pour la précision ;-)
    @++

    ...Mana mana
    Tutudutu...
    0
    1. jisisv Messages postés 3678 Statut Modérateur 936
       
      Merci pour ta précision

      Johan
      Gates gave you the windows.
      GNU gave us the whole house.(Alexandrin)
      0