查找命令

时间:2015-06-11 12:25:49

标签: regex linux bash shell unix

我想列出以数字开头并以“.c”扩展名结尾的文件。以下是使用的find命令。但是,它没有给出 预期的产出。

命令:

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

2 个答案:

答案 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"

应该有用。