当我正要向 gnu.org 上的 findutils 提交一个 bug 时,我看到一则通知,询问我是否知道这两个命令之间的区别:
find -name *.c
和
find -name "*.c"
我经常使用 find 命令,但我认为这两个命令没什么区别。所以我很好奇是我错了还是这只是另一个 GNU 家伙在开玩笑?
答案1
在第一个例子中,你的 shell 将首先扩展*.c
以匹配当前目录中以 结尾的所有文件.c
。
因此,如果你的目录中有one.c
、zwei.c
和tres.c
,你的 shell 会将其扩展为
find . -name one.c zwei.c tres.c
并且可能会感到困惑,因为您在--find
之后传递了几个额外的参数,并且它们不被视为您正在搜索的内容的一部分。-name one.c
zwei.c
tres.c
-name
在第二个示例中,您将文字字符串传递*.c
给-name
选项find
。这是find
知道如何处理的东西——可能就是您正在寻找的东西。
完成相同操作的另一种方法是使用反斜杠转义:
find . -name \*.c
(还请注意,您的示例需要一个参数来告诉find
从哪里开始搜索。这通常只是.
为了指示当前目录。)
答案2
前者仅*.c
当当前目录中没有匹配的文件时才会产生结果,否则它将扩展为这些文件名。后者将始终产生文本*.c
。