奇怪的是,有时 find 中的以下 -name 模式会意外地成功搜索所有相应的文件名。按权利,它只能通过shell parse在当前目录中搜索一个对应的文件名(找不到不带引号的实用程序)。
find /tmp -type f -name *.txt
/tmp/amp_iostat.txt
/tmp/awrrpt_1_7950_7973.txt
/tmp/oplanlog/osys/2014-07-01-12-26-28/log.txt
/tmp/oplanlog/osys/2014-07-01-13-15-33/log.txt
/tmp/oplanlog/osys/2014-07-01-13-17-58/log.txt
/tmp/oplanlog/osys/2014-07-01-13-30-27/log.txt
/tmp/oplanlog/osys/2016-10-27-19-38-50/log.txt
/tmp/pms2_20170427.txt
/tmp/pmsdb1_20170622.txt
/tmp/pmssh1_20160728.txt
/tmp/pmssh1_20160831.txt
/tmp/pmssh1_20161227.txt
/tmp/pmssh1_20170328.txt
/tmp/pmssh1_20170523.txt
/tmp/pmssh1_20170727.txt
/tmp/pmssh1_20170822.txt
/tmp/pmssh2_20170328.txt
/tmp/pmssh_20170119.txt
/tmp/pmssh_20170220.txt
/tmp/sgpms_20140717_1736_summary.txt
/tmp/sgpms_20140717_1736_trace.txt
/tmp/sgpms_20140717_1737_summary.txt
/tmp/sgpms_20140717_1737_trace.txt
/tmp/sgpms_20140717_1739_summary.txt
/tmp/sgpms_20140717_1739_trace.txt
/tmp/sgpms_20140717_1743_summary.txt
/tmp/sgpms_20140717_1743_trace.txt
/tmp/sgpms_20140717_1749_summary.txt
/tmp/sgpms_20140717_1749_trace.txt
/tmp/sgpms_20140717_1751_summary.txt
/tmp/sgpms_20140717_1751_trace.txt
find /tmp -type f -name *.txt|wc -l
31
没有任何引用
*.txt
会受到路径名扩展(又名文件名扩展)的影响。这发生在当前工作目录(CWD) 中。如果 CWD 包含任何扩展名为 'txt' 的文件,则在调用find
shell之前,将*.txt
参数替换为匹配的文件名,您的命令将变为如下所示:根据扩展是否返回,您至少可以获得三个结果......
find
:测试-name
将仅匹配该文件-name
将不匹配另一方面,如果 CWD 不包含任何 txt 文件,则将
*.txt
其传递给它,find
并且它的行为与您引用它时完全相同。道德:当使用
find
总是在包含 glob 的模式周围加上引号时,除非您确实希望发生路径名扩展(您很少会看到为该-name
选项故意这样做)。