Expression régulière dans la commande Rechercher

Je veux lister les fichiers qui commencent par un nombre et se termine par l’extension “.c”. La commande suivante est utilisée. Mais, il ne donne pas le résultat attendu.

Commander:

find -type f -regex "^[0-9].*\\.c$" 

C’est parce que l’option regex fonctionne avec le chemin complet et que vous avez spécifié uniquement le nom du fichier. De l’ man find :

  -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. 

Essayez avec ceci:

 find -type f -regex ".*/[0-9][^/]+\.c$" 

où vous recherchez explicitement une chaîne où “le format de votre nom de fichier suit une chaîne qui se termine par une barre oblique”

MISE À JOUR: J’ai corrigé la regex. J’ai changé .* Dans le nom de fichier à [^\]+ comme après “n’importe quelle chaîne qui se termine par une barre oblique”, nous ne voulons pas trouver une barre oblique dans cette partie de la chaîne car ce ne serait pas un nom de fichier mais un autre répertoire !

NOTE: La correspondance .* Peut être très dommageable …

Utilisez simplement l’option -name . Il accepte le pattern pour le dernier composant du nom de chemin comme le dit le document:

 -name pattern True if the last component of the pathname being examined matches pattern. Special shell pattern matching characters (``['', ``]'', ``*'', and ``?'') may be used as part of pattern. These characters may be matched explicitly by escaping them with a backslash (``\''). 

Alors:

 $ find -type f -name "[0-9]*.c" 

devrait marcher.