当模式包含通配符时,如何使用 find 命令有效地进行递归?

当模式包含通配符时,如何使用 find 命令有效地进行递归?

我的印象是以下命令将从当前目录开始向下递归搜索并列出所有 Java 文件。

但是,如果我的主目录根目录中有一个 Java 文件,它会列出该文件,然后停止。

find 是否应该在第一次匹配时停止,即使使用通配符?我想我对它的用法有误解。感谢您的启发。

find . -name *.java

答案1

在将通配符模式*.java传递给命令之前,shell 会先对其进行扩展。如果当前目录中find只有一个文件,则 shell 将执行命令。如果有两个文件和,则执行命令并提示语法错误。如果当前目录中没有匹配的文件,则 shell 不会扩展模式,因此将按您的要求执行。foo.javafind . -name foo.javabar.javafoo.javafind . -name bar.java foo.javafindfind . -name *.java

要告诉 shell 不要扩展模式,以便始终将其按原样传递给find,请引用它:

find . -name '*.java'
find . -name "*.java"
find . -name \*.java

相关内容