除非指定扩展名,否则 find -path 不匹配文件

除非指定扩展名,否则 find -path 不匹配文件

find使事情变得精彩的重要原因之一

如果我这样做:

find -path *ncf

或这个:

find -path ncf*

我没有得到任何结果,但如果我这样做:

find -path *ncf.js

我得到一个匹配的文件。这是为什么?这是 find 的独特之处,还是更宏大的东西?有人知道写这封信的人的家庭住址吗find

答案1

这里有两个问题。

  1. 您需要转义*,否则它将由 shell 处理(匹配当前目录中的文件,如果有的话):

    find -path \*ncf.js
    

    或者

    find -path '*ncf.js'
    
  2. 您看到的行为来自于通配表达式与文件匹配的事实小路完整的内容,包括扩展。 (用于-name匹配文件名,文件名仍包含扩展名。)这不是特定于 的,请在包含文件的目录中find尝试使用它。ls

请注意,您应该养成指定起始目录的习惯,即使它是.;并非所有版本都find使用它作为默认值。

答案2

我会添加,因为其他答案中没有解释这一点。

find -path "*ncf"
find -path "*ncf.js"

上面的内容并不相同(注意:我将 glob 放在引号中,以阻止 shell 扩展它)。原因是:一个以 结束,ncf另一个以 结束ncf.js。如果这令人困惑,那么您需要放弃文件扩展名的想法。 Unix 没有它们:点只是一个字符,不会被区别对待(除非它是第一个字符,在这种情况下它是隐藏的:它可能不会出现在目录列表中)。

相关内容