关于find命令 name 匹配字符无法正确生效的问题 find: paths must precede expression:

linux下find命令
 
find /yazuo_apps/crm35/current -name *.sh;
 
此命令在某些情况下不能顺利找到/yazuo_apps/crm35/current下的*.sh文件
 
-name后面的参数 *.sh 并不一定会直接传给 find命令,而是现在当前目录下进行匹配
 
根据当前目录的匹配情况,可能有一下三种可能:
 
1、当前目录不存在*.sh,此时shell会顺利的把 *.sh传递给find命令,此时一切顺利。
2、当目录存在一个abc.sh时,shell命令实际变为 find /yazuo_apps/crm35/current -name abc.sh;
3、当前目录存在多个sh文件(abc.sh; cba.sh),shell命令实际变为 find /yazuo_apps/crm35/current -name abc.sh cba.sh;,此时因为-name后面有两个匹配字符,shell将报错。
 find: paths must precede expression:
 
解决方法:
-name 的匹配字符串一定要用单引号或双引号引住,防止以上问题发生。
正确的命令:
find /yazuo_apps/crm35/current -name "*.sh";
 
总结:
shell的细节还是有很多需要研究,在以后的使用过程中要力求严谨!
 
参考文章
http://zhousir.sinaapp.com/?p=81#comment-486
原文地址:https://www.cnblogs.com/baibaluo/p/2642403.html