文章出处:http://zhousir1991.diandian.com/page/4
[root@my ~]# find . -name *.rpm
./Nessus-4.0.1-es5.i386.rpm
[root@my ~]# find . -name *.tar.gz
find: paths must precede expression: recordmydesktop-0.3.8.1.tar.gz
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
[root@my ~]# find . -name '*.tar.gz'
./gtk-recordmydesktop-0.3.8.tar.gz
./recordmydesktop-0.3.8.1.tar.gz
以上是本人遇到的问题, 加了单引号之后解决 :网上找到相关资料得以解决,引自互联网, 版权问题请联系本人!
find / -name mysql* 中 -name的参数并不是实际的 mysql* ,而是shell 先解析msyql* ,如果在当前目录能找到mysql开头的文件名或者目录名,将匹配后的文件名或者目录名作为name的参数传给它,分以下三种情况:
1、假如当没有可匹配的shell将 mysql* 传给find;
2、假如只匹配到一个会正常执行find命令,但是结果是错误的,比如当前目录只有mysqla一个目录或者文件,shell会将 mysqla 作为name的参数传给find,然后执行命令;
3、假如匹配到多个就会报错,错误提示如下:
find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]
也就是说当有多个文件或者目录被匹配时,shell会将被匹配的所有文件或者目录名作为name的参数传给find,这样就致使find无法正常执行。比如当前目录有mysqla , mysqlb 里面文件,shell匹配后的命令行是find / -name mysqla mysqlb ,这样find就无法正常执行。
而find / -name “mysql*” ,shell不会解析 mysql* 这个表达式,直接将mysql* 传给find,find会正常执行,并且得到你想要的结果。
总结:在以后的shell使用过程中应力求严谨!