在bash shell中查找命令,并且-name选项有疑问
下面两者有什么区别:
find . -type f -name *.bmp find . -type f -name *.bmp 我测试过,它们都返回相同的结果,所以内部有什么不同的_deep? 从removed answer添加: 因此,为了避免特殊*****字符的shell扩展,只需将*作为参数传递给find命令并让它处理它. 但是在我的机器上,它们都很好,都返回当前目录中和下面的bmp文件,仅举几例,结果如下,为简洁省略了一些 ./images/building_color.bmp ./images/building_gray.bmp ./images/car_gray.bmp ./images/temple_color.bmp ./images/boat_gray.bmp ./images/tools_gray.bmp ./images/temple_gray.bmp ./images/tools_color.bmp ./images/car_color.bmp ./images/boat_color.bmp 系统信息: GNU bash,版本4.1.5(1)-release(i486-pc-linux-gnu) Linux sysabod-laptop 2.6.32-30-generic#59-Ubuntu SMP Tue Mar 1 21:30:21 UTC 2011 i686 GNU / Linux 解决方法
以下是它们的不同之处:第一个始终有效,第二个无效.
至于原因:在bash中,shell globs(包括*或?的通配符模式)由shell扩展为与glob匹配的所有文件.但是,如果不存在此类文件,则保留该模式. 因此,如果您在没有bmp文件的目录中,命令的工作方式相同,因为第一个是转义的,而bash在第二种情况下无法找到匹配的任何文件. 如果你从一个只包含一个这样的文件的目录运行它,比如foo.bmp,第一个会找到子树中的所有bmp文件,而第二个会找到所有名为foo.bmp的文件.如果在具有多个bmp文件的目录中运行,我相信你会收到错误,因为find不知道如何处理所有文件名. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |