我的印象是以下命令将从当前目录开始向下递归搜索并列出所有 Java 文件。
但是,如果我的主目录根目录中有一个 Java 文件,它会列出该文件,然后停止。
find 是否应该在第一次匹配时停止,即使使用通配符?我想我对它的用法有误解。感谢您的启发。
find . -name *.java
答案1
在将通配符模式*.java
传递给命令之前,shell 会先对其进行扩展。如果当前目录中find
只有一个文件,则 shell 将执行命令。如果有两个文件和,则执行命令并提示语法错误。如果当前目录中没有匹配的文件,则 shell 不会扩展模式,因此将按您的要求执行。foo.java
find . -name foo.java
bar.java
foo.java
find . -name bar.java foo.java
find
find . -name *.java
要告诉 shell 不要扩展模式,以便始终将其按原样传递给find
,请引用它:
find . -name '*.java'
find . -name "*.java"
find . -name \*.java