我想列出以数字开头并以“.c”扩展名结尾的文件。以下是使用的find命令。但是,它没有给出 预期的产出。
命令:
find -type f -regex "^[0-9].*\\.c$"
答案 0 :(得分:1)
这是因为正则表达式选项适用于完整路径,并且您只指定了文件名。来自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$"
你明确地查找一个字符串,其中“你的文件名格式跟随任何以斜杠结尾的字符串”
更新:我对正则表达式进行了修正。我将文件名中的.*
更改为[^\]+
,因为在之后“任何以斜杠终止的字符串”我们不想在字符串的那一部分找到斜杠,因为它不是文件名而是另一个目录!
注意:匹配的.*
可能非常有害......
答案 1 :(得分:1)
只需使用-name
选项即可。它接受路径名的最后一个组件的模式,如文档所示:
-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 (``\'').
所以:
$ find -type f -name "[0-9]*.c"
应该有用。