常见错误
"find: 路径必须在表达式之前"

常见错误

"find: 路径必须在表达式之前"

这个错误太对于新手太常见了,我也常犯这样的错误,看看下面的示例:

[root@localhost distutils-0.1]# ls  ==> 这里先看看当前目录下有哪些文件和目录
configs  distutils.spec  doc  Makefile  scripts  src  tests
[root@localhost distutils-0.1]# set -x && find src -name *[hc] ||  set +x
+ find src -name distutils.spec doc src
find: 路径必须在表达式之前
Usage: find [-H] [-L] [-P] [path...] [expression]
+ set +x

上面通过 set -x 打开shell调试模式,我们可以看到对于*[hc](在find使用的时 候,我没有加上引号),shell给解释成一堆文件和目录了: distutils.spec doc src 。这是shell的文件匹配特性。所以find会出现错误。

所以在使用shell命令行的时候要切记,shell会第一个解释它!此处find可以这样来用:

find src -name \*[hc]  # 转义星号
find src -name "*[hc]"  # 让shell当成字符串
find src -name "*.[hc]" #
find src -name \*.hc  # 其实我们试想寻找 .c 和 .h 文件,
                      # 所以加个'.'可以避免src这样的文件和目录出现在结果里面。