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 -regex
manière interchangeable?)
Toute aide appréciée.
bash
find
regular-expression
Lukas88
la source
la source
-iname
(et-name
) utilisent des globes , qui n'ont pas cette syntaxe.Réponses:
Tu pourrais essayer
ou
la source
Si vous avez GNU find, vous pouvez utiliser un autre type d'expression régulière:
Selon GNU, il
find
utilise 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
sed
syntaxe des expressions régulières, alors qui sait quelles parties de celui-ci sont prises en charge.la source
sed
commeed
semble être un alias pourposix-basic
, devrait donc être compatible avec POSIX BRE (bien qu'il supporte certaines extensions comme\+
). Il n'est pas compatible avec GNUsed
où, par exemple,[\n]
correspond à une nouvelle ligne au lieu de la barre oblique inverse oun
requis par POSIX. Voir aussi-regextype posix-extended
pour les ERE POSIX (donc.*myfile[0-9]{1,2}
), aussi avec des extensions comme\s
ou\<
-regextype egrep
vous pouvez éviter les contre-obliques.