当我看到一条通知问我是否知道这两个命令之间的区别时,我打算向 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
哪里开始搜索。这通常只是.
为了指示当前目录。)