查找具有超过特定文件大小的特定扩展名的文件

Unk*_*own 1 linux bash find

我在bash中使用find命令时遇到问题.我正在尝试查找以.c结尾且文件大小超过2000字节的文件.我以为会是:

find $HOME -type f -size +2000c .c$
Run Code Online (Sandbox Code Playgroud)

但显然这是不正确的.

我究竟做错了什么?

Zag*_*rax 5

find $HOME -type f -name "*.c" -size +2000c

看一下-namemane页面中的开关:

-name pattern
              Base of  file  name  (the  path  with  the  leading  directories
              removed)  matches  shell  pattern  pattern.   The metacharacters
              (`*', `?', and `[]') match a `.' at the start of the  base  name
              (this is a change in findutils-4.2.2; see section STANDARDS CON?
              FORMANCE below).  To ignore a directory and the files under  it,
              use  -prune; see an example in the description of -path.  Braces
              are not recognised as being special, despite the fact that  some
              shells  including  Bash  imbue  braces with a special meaning in
              shell patterns.  The filename matching is performed with the use
              of  the  fnmatch(3)  library function.   Don't forget to enclose
              the pattern in quotes in order to protect it from  expansion  by
              the shell.
Run Code Online (Sandbox Code Playgroud)

请注意最后的建议始终将模式括在引号内.选项的顺序无关紧要.再看看手册页:

EXPRESSIONS
       The  expression  is  made up of options (which affect overall operation
       rather than the processing of a specific file, and always return true),
       tests  (which  return  a  true or false value), and actions (which have
       side effects and return a true or false value), all separated by opera?
       tors.  -and is assumed where the operator is omitted.

       If the expression contains no actions other than -prune, -print is per?
       formed on all files for which the expression is true.
Run Code Online (Sandbox Code Playgroud)

因此,默认情况下,选项与和-and运算符连接:为了找到文件,它们必须全部为真,顺序根本不重要.该订单可能仅适用于其他运营商比其他运营商更复杂的模式匹配-and.