commande find avec quantificateur d'expressions régulières, par exemple {1,2}


14

J'ai essayé de créer une chaîne de commande find qui trouvera tous les fichiers se terminant par un nombre 1-99 mais exclut tous les autres.

Par exemple, je veux trouver monfichier1 monfichier99 mais pas monfichier456 et non monfichierbackup

Le regex auquel je pense est myfile[1-9]{1,2}mais je ne peux pas faire fonctionner cela avec find.

find . -regex '.*myfile[0-9]{1,2}' OU find . -iname 'myfile[0-9]{1,2}'

D'après ce que je peux voir, c'est la {1,2}partie qui ne fonctionne pas.

(au fait, pouvez-vous utiliser de -name -regexmanière interchangeable?)

Toute aide appréciée.


1
-iname(et -name) utilisent des globes , qui n'ont pas cette syntaxe.
— l0b0

Réponses:


10

Tu pourrais essayer

find . -regex '.*myfile[0-9][0-9]?'

ou

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)

Merci - la première ligne fonctionne pour moi. J'avais essayé avec -iname mais je ne pense pas que cela supporte la syntaxe, sinon je fais quelque chose de mal.
— Lukas88

17

Si vous avez GNU find, vous pouvez utiliser un autre type d'expression régulière:

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'

Selon GNU, il findutilise une syntaxe d'expression régulière Emacs stérilisée par défaut - Emacs prend en charge la syntaxe, mais au moins GNU ne la prend pas en charge.\{from,to\}find

Étrangement, le manuel de référence ne comprend pas de section sur la sedsyntaxe des expressions régulières, alors qui sait quelles parties de celui-ci sont prises en charge.


1
sedcomme edsemble être un alias pour posix-basic, devrait donc être compatible avec POSIX BRE (bien qu'il supporte certaines extensions comme \+). Il n'est pas compatible avec GNU sedoù, par exemple, [\n]correspond à une nouvelle ligne au lieu de la barre oblique inverse ou nrequis par POSIX. Voir aussi -regextype posix-extendedpour les ERE POSIX (donc .*myfile[0-9]{1,2}), aussi avec des extensions comme \sou\<
— Stéphane Chazelas

Je n'ai jamais connu -regextype. Il semble que si vous l'utilisez, -regextype egrepvous pouvez éviter les contre-obliques.
— Sridhar Sarnobat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.