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