[GNU] find et regex egrep

Le
chksum
Bonjour,

je suis en train d'écrire un script de nettoyage de logs d'une appli
verbeuse.Malheureusement pour moi dans ce repertoire il n'y a pas que
des logs. La machine est une debian.

Donc je me suis dirigé vers find pour faire rm sur les vieux log
et gzip sur les moins vieux J'ai regardé du coté de tmpreaper mais
je suis pas sûr que cela convienne à mon utilisation.

Mais je veux ajouter une regex sur mon find et c'est là que le bât
blesse Je patauge à chaque fois que je touche aux regex à ça pourtant
cela me serait bien utile.

les fichiers de logs que je dois matcher sont du genre:
/application/logs/fichier.YYYY-MM-JJ.log

quand je fais ça j'ai bien des résultats:

ls -1 /application/logs/ | egrep '.[0-9]{4}-[0-9]{2}-[0-9]{2}.'

par contre:
avec le find j'ai rien:
find /application/logs/ -regextype egrep -regex
'.[0-9]{4}-[0-9]{2}-[0-9]{2}.' -print


Je sais bien que le regextype par defaut est emacs et je trouve pas bcp
de docs dessus donc je me suis dirigé vers le type egrep que je peux
tester.

Voila, Merci de votre aide.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacques L'helgoualc'h
Le #18467661
Le 23-01-2009, chksum
Bonjour,



bonsoir,

[...]
les fichiers de logs que je dois matcher sont du genre:
/application/logs/fichier.YYYY-MM-JJ.log

quand je fais ça j'ai bien des résultats:

ls -1 /application/logs/ | egrep '.[0-9]{4}-[0-9]{2}-[0-9]{2}.'

par contre:
avec le find j'ai rien:
find /application/logs/ -regextype egrep -regex
'.[0-9]{4}-[0-9]{2}-[0-9]{2}.' -print



Avec find, le motif doit correspondre au chemin complet, et non une
partie...

find /application/logs/ -regextype posix-egrep
-regex '.*.[0-9]{4}-[0-9]{2}-[0-9]{2}.log'

--
Jacques L'helgoualc'h
Stephane CHAZELAS
Le #18475441
2009-01-23, 19:30(+01), chksum:
[...]
ls -1 /application/logs/ | egrep '.[0-9]{4}-[0-9]{2}-[0-9]{2}.'

par contre:
avec le find j'ai rien:
find /application/logs/ -regextype egrep -regex
'.[0-9]{4}-[0-9]{2}-[0-9]{2}.' -print


[...]

Le -regex du GNU find matche le chemin complet du fichier et il
y a un ^ et $ implicites. Donc, tu dois faire:

find /application/logs/ -regextype egrep -regex
'.*.[0-9]{4}-[0-9]{2}-[0-9]{2}.[^/]*'

Ou, en etant portable:

d='[0-9][0-9]'
find /application/logs/ -name "*.$d$d-$d-$d.*"

--
Stéphane
chksum
Le #18508901
Stephane CHAZELAS a écrit :
2009-01-23, 19:30(+01), chksum:
[...]
ls -1 /application/logs/ | egrep '.[0-9]{4}-[0-9]{2}-[0-9]{2}.'

par contre:
avec le find j'ai rien:
find /application/logs/ -regextype egrep -regex
'.[0-9]{4}-[0-9]{2}-[0-9]{2}.' -print


[...]

Le -regex du GNU find matche le chemin complet du fichier et il
y a un ^ et $ implicites. Donc, tu dois faire:

find /application/logs/ -regextype egrep -regex
'.*.[0-9]{4}-[0-9]{2}-[0-9]{2}.[^/]*'

Ou, en etant portable:

d='[0-9][0-9]'
find /application/logs/ -name "*.$d$d-$d-$d.*"




Merci à jacques et Stephane pour l'histoire du ^ $ implicite.

Au passage, sur ma machine debian, find accepte l'argument
-regextype egrep mais la regex ne fonctionne pas. Si je remplace
egrep par posix-egrep par contre, ça marche.

PS:Je peux fournir mon script, si certains sont intéressés...
Olivier Miakinen
Le #18519901
Le 28/01/2009 11:16, chksum a écrit :

[ option -regex du « GNU find » ]
find /application/logs/ -regextype egrep -regex
'.*.[0-9]{4}-[0-9]{2}-[0-9]{2}.[^/]*'



Au passage, sur ma machine debian, find accepte l'argument
-regextype egrep mais la regex ne fonctionne pas. Si je remplace
egrep par posix-egrep par contre, ça marche.



Peut-être est-ce la syntaxe {4} ou {2} qui n'est pas reconnue par le
type egrep sur Debian ? Je fais suivre à tout hasard vers le groupe
fr.comp.lang.regexp au cas où certains connaîtraient l'ensemble des
différences entre la commande find de GNU et celle de Debian.
Publicité
Poster une réponse
Anonyme