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!!!
A voir également:

3 réponses

jisisv Messages postés 3678 Statut Modérateur 934
 
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
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
asevere Messages postés 13521 Statut Webmaster 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
jisisv Messages postés 3678 Statut Modérateur 934
 
Merci pour ta précision

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