带引号和不带引号的 find -name 之间的区别?

fwo*_*nce 3 linux gnu find

当我看到一条通知问我是否知道这两个命令之间的区别时,我打算向 gnu.org 上的 findutils 提交错误:

find -name *.c    
Run Code Online (Sandbox Code Playgroud)

find -name "*.c"
Run Code Online (Sandbox Code Playgroud)

我经常使用 find 命令,但我认为这两个没有任何区别。所以我很好奇我错了还是只是另一个 GNU 家伙在开玩笑?

Dou*_*ris 11

在第一个示例中,您的 shell 将首先扩展*.c以匹配当前目录中以.c.

因此,如果您的目录中有one.c, zwei.c, 和tres.c,您的 shell 会将其扩展为

find . -name one.c zwei.c tres.c
Run Code Online (Sandbox Code Playgroud)

并且find可能会感到困惑,因为您在之后传递了几个额外的参数-name one.c-zwei.c并且tres.c不被视为您正在搜索的内容的一部分-name

在第二个例子中,你通过文字串*.c-name的选项find。这是find知道如何处理的东西- 并且可能是您正在寻找的东西。

完成同样事情的另一种方法是使用反斜杠转义:

find . -name \*.c
Run Code Online (Sandbox Code Playgroud)

(另请注意,您的示例需要一个参数来告诉从find哪里开始搜索。这通常只是.为了指示当前目录。)

  • GNU `find` 默认使用 `.` 作为搜索路径。 (2认同)