我正在使用
find -iname *prib*
并只得到一个结果“./prib09jack.pdf”
find -iname "*prib*"
我得到了更多我正在寻找的结果,例如
./Dir1/PRIB09/prib09jackTFF1.pdf
还有很多,但为什么在“普里布“?
最好的。
答案1
如果在运行 find 命令时当前目录中有匹配的文件(或多个文件)*prib*
,则 shell 将首先扩展通配符以匹配文件名,然后再将参数传递给寻找,并导致运行的命令与用户预期的不一样。
例如,
$ ls foo*
foobar
$ find -iname foo*
./foobar
$ find -iname "foo*"
./foobar
./dir/foobz
./dir2/fooblat
简而言之,引号会延迟 find 命令执行通配符解释。缺少引号会立即展开。
答案2
问题是你的 shell 在将通配符 * 交给 find 之前会将其展开。你希望 find 能获取它们,因此你需要对它们进行转义。引号可以做到这一点,或者你可以这样做
find -iname \*iprib\*
并且它也能正常工作。关键是,您希望通配符能够使其不会被沿途的任何其他程序(例如您的 shell)解释。