Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[GNU] find et regex egrep

4 réponses
Avatar
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.

4 réponses

Avatar
Jacques L'helgoualc'h
Le 23-01-2009, chksum a écrit :
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
Avatar
Stephane CHAZELAS
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
Avatar
chksum
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...
Avatar
Olivier Miakinen
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.