Commande find sous linux [RESOLU]

Commande find sous linux [RESOLU] - Shell/Batch - Programmation

Marsh Posté le 26-05-2006 à 11:33:31    

Bonjour tout le monde,
 
Voila j'ai un soucis qui m'embete depuis un petit moment.
Je souhaiterais lister tous les fichiers php d'une arborescence (a savoir qu'il existe des .php, .php4, .php5, .php.old, .php_backup)
 
Comment puis-je faire ca avec la commande find ?
 
Je n'ai trouvé que ceci :
find . -type f \( -iname '*.php' -o -iname '*.php3' -o -iname '*.php4' -o -iname '*.php5' \)
 
mais je ne trouve pas cela super propre, j'aurais bien vu une petite expression régulière mais impossible d'arriver au même résultat  :heink:  
 
Avez vous une idée ?
Merci  :wahoo:  ;)


Message édité par Yop69 le 27-05-2006 à 10:42:56
Reply

Marsh Posté le 26-05-2006 à 11:33:31   

Reply

Marsh Posté le 26-05-2006 à 18:54:40    

find . -type f -name "*.php*" ;)


Message édité par Sve@r le 26-05-2006 à 18:55:14

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 26-05-2006 à 20:01:09    

Merci pour ta réponse
 
Ta commande ne me convient pas... elle va me renvoyer les fichiers du genre toto.php.old et va aussi oublier les fichiers genre TOTO.PHP :)
Celle que j'ai fais renvoie le bon truc mais je voulais juste me servir des expressions régulières (avec la commande -regex par exemple) mais j'ai farfouillé partout sur le net testé plein de trucs et impossible de la faire fonctionner correctement...
 
 :(

Message cité 1 fois
Message édité par Yop69 le 26-05-2006 à 20:06:46
Reply

Marsh Posté le 26-05-2006 à 23:16:10    

Yop69 a écrit :


Ta commande ne me convient pas... elle va me renvoyer les fichiers du genre toto.php.old et va aussi oublier les fichiers genre TOTO.PHP :)


 
find . -type f -name "*.[pP][hH][pP]*" -print  :sol:  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 27-05-2006 à 01:59:16    

-iname au lieu de -name :o
(i comme case insensitive :o)
lisez le man bon sang :o

Message cité 1 fois
Message édité par 0x90 le 27-05-2006 à 01:59:29

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 27-05-2006 à 09:39:44    

0x90 a écrit :

-iname au lieu de -name :o
(i comme case insensitive :o)
lisez le man bon sang :o


 
Lisez les posts bon sang :o
 
Si tu avais lu mon premier post, tu aurais vu que je l'avais déjà employé le iname. Le man ça fait des lustres que je le décrypte et en passant, je n'ai jamais compris pourquoi il était aussi à chier  :lol:  
 
Genre il n'y a aucun exemple dedans et c'est bien regrettable (à la façon de la doc php) car souvent c'est un peu ambigu leur explication
 

Reply

Marsh Posté le 27-05-2006 à 09:41:07    

Sve@r a écrit :

find . -type f -name "*.[pP][hH][pP]*" -print  :sol:


 
 
Yes je vais tester ça, ça à l'air pas mal du tout !!  :love:  
 
Mais non je suis bête, cela ne marche pas !!!  :D  
 
Le * à la fin va prendre autant de caractère qu'il y en a :)
Il faudrait le joker "?"
 
genre find . -type f -regex "*.php[3-5]?" -print
 
Vous voyez ce que j'aimerais ? ce n'est pas la casse qui me pose un problème ( genre find . -type f -regex "*.[pP][hH][pP][3-5]?" -print le résoud bien ) mais le fait de prendre que les fichiers [*.php] [*.php3] [*.php4] [*.php5] et pas [*.php*] qui elle me prend trop de truc.
 
J'en viens un peu à la conclusion que la commande find est méga super puissante mais que non elle ne peut faire ça (ça m'étonne quand même beaucoup, je suis sur qu'il y a un moyen efficace en expression régulière)
 
Tant pis au pire je prendrais ma bidouille avec le OU logique (-o)
 
merci quand même Sve@r et 0x90  ;)


Message édité par Yop69 le 27-05-2006 à 09:49:39
Reply

Marsh Posté le 27-05-2006 à 10:07:58    

Yop69 a écrit :

Lisez les posts bon sang :o
 
Si tu avais lu mon premier post, tu aurais vu que je l'avais déjà employé le iname. Le man ça fait des lustres que je le décrypte et en passant, je n'ai jamais compris pourquoi il était aussi à chier  :lol:  
 
Genre il n'y a aucun exemple dedans et c'est bien regrettable (à la façon de la doc php) car souvent c'est un peu ambigu leur explication


 
Oops jme suit fait avoir par l'horreur du post juste au dessus :ange:
 
Bon allez pour me faire pardonner :


find . -iregex ".*php[3-5]?"


Et ca marche très bien je viens de tester :o


╭─────╮
│10:11├────╌╌┄ ~/extest ┄╌╌──➝
╯┄┄┄┄┄╰─➝ ls
lala.php  lala.php3  lala.php4  lala.php5  lala.php8  lala.phplop
╭─────╮
│10:12├────╌╌┄ ~/extest ┄╌╌──➝
╯┄┄┄┄┄╰─➝ find . -iregex ".*php[3-5]?"
./lala.php3
./lala.php4
./lala.php5
./lala.php


 
[edit]Oula le prompt passe mal sur hfr ...

Message cité 2 fois
Message édité par 0x90 le 27-05-2006 à 10:08:27

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 27-05-2006 à 10:34:22    

0x90 a écrit :

Oops jme suit fait avoir par l'horreur du post juste au dessus :ange:
 
Bon allez pour me faire pardonner :


find . -iregex ".*php[3-5]?"


Et ca marche très bien je viens de tester :o


╭─────╮
│10:11├────╌╌┄ ~/extest ┄╌╌──➝
╯┄┄┄┄┄╰─➝ ls
lala.php  lala.php3  lala.php4  lala.php5  lala.php8  lala.phplop
╭─────╮
│10:12├────╌╌┄ ~/extest ┄╌╌──➝
╯┄┄┄┄┄╰─➝ find . -iregex ".*php[3-5]?"
./lala.php3
./lala.php4
./lala.php5
./lala.php


 
[edit]Oula le prompt passe mal sur hfr ...


 
Bon sang mais bien sur !!
 
quand j'utilisais -regex je faisais ca "*.php" alors que j'avais oublié que le point est un joker... et que donc c'est l'inverse ".*php[3-5]?"
 
on pourrait même la paufiner : find . -iregex ".*\.php[3-5]?" non ?
 
en tout cas merci beaucoup  :love: tu t'es largement fait pardonner  :D


Message édité par Yop69 le 27-05-2006 à 10:34:41
Reply

Marsh Posté le 27-05-2006 à 10:42:06    

Je viens de tester sur mon shell windows et donc la commande :
 
find . -iregex ".*\.php[3-5]?"
 
permet donc de lister tous les fichiers php valides d'une arborescence...
 
 
YES ! vive Cygwin au passage :)
 
 :jap: Merci à vous !  :jap:


Message édité par Yop69 le 27-05-2006 à 10:44:18
Reply

Marsh Posté le 27-05-2006 à 10:42:06   

Reply

Marsh Posté le 27-05-2006 à 12:38:17    

0x90 a écrit :

Oops jme suit fait avoir par l'horreur du post juste au dessus :ange:


 
Oh mais oh !!! Mais quoi que donc ??? C'est quoi qui est l'horreur ???
 
En plus, tous les find ne connaissent pas "-iname" (comme tous ne connaissent pas "-newer" ou "-mindepth" )...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 27-05-2006 à 12:41:50    


 
Fight !  :bounce:  
 
 :lol:

Reply

Marsh Posté le 27-05-2006 à 18:24:13    

Yop69 a écrit :

Fight !  :bounce:  
 
 :lol:


Mais non, pas fight.
S'il connait un truc mieux que ce qui a été dit, il a le droit de le dire. Mais il y a la manière...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 27-05-2006 à 19:09:10    

Sve@r a écrit :

Mais non, pas fight.
S'il connait un truc mieux que ce qui a été dit, il a le droit de le dire. Mais il y a la manière...


 
Je suis tout à fait d'accord avec toi...
 
Surtout quand on se permet "d'apprendre" aux autres de lire la doc alors que lui même ne lit pas nos indications... mais bon ce n'est pas bien grave, j'espère que cela lui aura servi un peu de leçon  :o , et de plus il a fait un bon effort pour aider donc c sympas...

Reply

Marsh Posté le 27-05-2006 à 19:25:09    

Hého ca va vous êtes bien gentils mais :
- Il était 2h du mat'
- Le titre parle de commande sous Linux, des Linux sans les outils GNU y'en a pas des masses, je pouvais donc considérer avoir affaire au find de GNU qui gère -iname
- Si on peut craindre l'absence de -iname on peut aussi bien craindre aussi celle de -regex vu qu'aucun des deux n'est POSIX.1
- faire des [hH] c'est mauche je persiste :o
- La section sur -regex contient des exemples ou son utilisation est bien claire.

Citation :


       -regex pattern
              File name matches regular expression pattern.  This is  a  match
              on  the  whole path, not a search.  For example, to match a file
              named `./fubar3', you can use the regular expression `.*bar.' or
              `.*b.*3',  but  not `f.*r3'.  The regular expressions understood
              by find are by default Emacs Regular Expressions, but  this  can
              be changed with the -regextype option.


 
Cela dit, on va pas rester 107 ans sur le sujet...

Message cité 1 fois
Message édité par 0x90 le 27-05-2006 à 19:25:57

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 27-05-2006 à 19:40:27    

0x90 a écrit :

Hého ca va vous êtes bien gentils...


[:ddr555]

0x90 a écrit :

Le titre parle de commande sous Linux, des Linux sans les outils GNU y'en a pas des masses, je pouvais donc considérer avoir affaire au find de GNU qui gère -iname


En effet, là t'as raison. C'est moi qui ne me souvenais plus de cette option...
 

0x90 a écrit :

faire des [hH] c'est mauche je persiste


On n'a pas la même vision de ce qui est "moche" de ce qui ne l'est pas... et il y a des cas où c'est nécessaire => par exemple un case qui teste si une réponse donnée est "oui" ou "non" avec gestion de la casse...
case $rep in
   [oO][uU][iI]) ...;;
   [nN][oO][nN]) ...;;
esac
 => je sais, on peut transformer la réponse en minuscules avant le case avec "tr" mais dans ce cas, il y a génération d'un processus supplémentaire donc ralentissement
 

0x90 a écrit :

Cela dit, on va pas rester 107 ans sur le sujet...


Certes...


Message édité par Sve@r le 27-05-2006 à 19:43:02

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 27-05-2006 à 19:48:21    

Pour le bash, je crois qu'on va pas débatre d'une syntaxe moche ou non du genre le case, on parle de bash quoi ^^


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 27-05-2006 à 19:51:12    

:)
 
Qu'il soit 2h ou 5h ou 13h n'a jamais été une excuse pour moi et j'essaie de rester courtois tout le temps maintenant je comprends que j'ai pu mal m'exliquer car à vrai dire je ne connais pas trop bien le monde linux (et encore moins POSIX :) )
 
Maintenant j'avais la solution à la base mais j'en voulais une "plus propre" par le biais des expressions régulières et on l'a trouvé donc merci bien.
 
Le seul soucis la-dedans a juste été le ton un peu trop "moi je sais et je vous apprends" qu'on t'as reproché c'est tout.
et quand tu mets "vous êtes bien gentils" tu restes dans ton style "je suis supérieur (bah oui les gens gentils sont on le sait très bien, neuneux....)"
 
Voila après moi je m'en tape j'ai eu ma solution  [:yop69]  
Et encore merci  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed