关于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使用过程中应力求严谨!
[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使用过程中应力求严谨!
相关文章推荐
- 从学习export命令理解到的Shell环境和变量生存期
- 从学习export命令理解到的Shell环境和变量生存期
- 从学习export命令理解到的Shell环境和变量生存期
- 关于linux的export命令和shell变量的生命周期,环境变量
- 从学习export命令理解到的Shell环境和变量生存期(转)
- 从学习export命令理解到的Shell环境和变量生存期
- 从学习export命令理解Shell环境和…
- 从学习export命令理解到的Shell环境和变量生存期
- 关于linux的export命令和shell变量的生命周期,环境变
- [Javascript]关于在ASP.NET环境中调用梅花雨的日历控件出错的解决办法
- Linux shell: 文件查找命令find,xargs详述 转载
- linux环境下文件搜索命令find
- Android 惯用工作命令mmm,mm,m,croot,cgrep,jgrep,resgrep,godir,快速查找 find grep合并使用
- 【转载】关于shutdown halt reboot poweroff init 0几种关机和重启命令的理解
- Shell常用命令find、grep总结
- Android在Shell环境下运行Linux命令
- 关于shell的一些命令
- 性感的shell命令--find
- 关于工作中linux命令的一些总结
- Shell关于Wget命令的使用技巧