Это потому, что регулярное выражение опция работает полный путь и вы указали только имя файла. Из 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.
Попробуйте с этим:
find -type f -regex ".*/[0-9][^/]+\.c$"
где вы явно искать строку, где «формат вашего файла следует любой строке, которая заканчивается с косой чертой»
UPDATE: Я сделал исправление для регулярного выражения , Я изменил .*
в имени файла на [^\]+
, как после «любая строка, которая заканчивается косой чертой», мы не хотим найти косую черту в этой части строки, потому что это будет не имя файла, а другой каталог!
ПРИМЕЧАНИЕ: согласующего .*
может быть очень вредным ...
'.' соответствует любому символу. Попробуйте '.]' Или '\ .' Также' -regex' соответствует полному пути, а не имени файла. – knittl
Я уже пробовал это. Но это не работает – Mohan
@Mohan As knittl сказал, что find не печатает только имя файла, поэтому что-то вроде этого будет работать: 'find -type f -regex '^ [.] [/] [0-9]. *. c'' – DBedrenko