日期:2014-05-16  浏览次数:20589 次

Linux 中的find 命令
  
这条命令中的"*.*"是表示所有文件,不是说双引号取消通配符的转义吗??  这说明引号内只能代表*.*这一个文件。不是矛盾了吗??
求正解。 

------解决方案--------------------
"*.*"表示所有文件名中间有个.的文件。
从程序的角度看,因为加了""引号,*.*会作为一个参数传给find的main函数。然后*.*就会被find程序解释!而不是shell.
但如果不加引号*.*才会被shell解释为所以满足这个条件的文件,即*.*会被替换成比如a.c b.c c.c ab.o一串字符,然后传给find程序作为参数。
不知道我说清楚没,

可以试下这个例子
ls "*"
ls *
看看他们的区别
------解决方案--------------------
这个你就理解错误了。find当中的-name指定的点好,星号没有正则表达式的含义,仅仅是通配符。和shell当中的通配符是一个意思。所以find -name "*.*"表示的是任意带有一个点的文件名,而不是你认为的那种所有的文件的意思。
------解决方案--------------------
一楼正解,加上引号,会将其作为参数传给find,然后find将其作为正则处理;不加引号,星号会被shell扩展,很可能会引起命令报错
------解决方案--------------------
引用:
"*.*"表示所有文件名中间有个.的文件。
从程序的角度看,因为加了""引号,*.*会作为一个参数传给find的main函数。然后*.*就会被find程序解释!而不是shell.
但如果不加引号*.*才会被shell解释为所以满足这个条件的文件,即*.*会被替换成比如a.c b.c c.c ab.o一串字符,然后传给find程序作为参数。
不知道我说清楚没,

……
这个是正解