(Ubuntu/Linux)“find”命令根据引号给出不同的结果

(Ubuntu/Linux)“find”命令根据引号给出不同的结果

我正在使用

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)解释。

相关内容