您的位置:首页 > 运维架构 > Shell

关于find命令在shell环境工作时出错的理解

2012-07-25 14:08 453 查看
文章出处: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使用过程中应力求严谨!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: