use*_*498 79 shell find wildcards
我正在运行以下命令,但它不是递归执行的:
find . -name *.java
Run Code Online (Sandbox Code Playgroud)
我知道当前目录下还有 java 文件,但它find
仅在当前目录上执行。我使用的是 OS X 10.9。
Jos*_* R. 105
问题是,你没有引用你的-name
参数。改为这样做:
find . -name '*.java'
Run Code Online (Sandbox Code Playgroud)
解释
如果没有引号,shell 会解释*.java
为 glob 模式,并在将其传递给find
. 这样,如果你有,比如说,foo.java
在当前目录中,find
的实际命令行将是:
find . -name foo.java
Run Code Online (Sandbox Code Playgroud)
这显然只会列出当前目录中的文件(除非您碰巧在树的下方有一些类似命名的文件)。
引用可防止 glob 扩展并将命令行传递给find
原样。
顺便说一句,如果 glob 未能匹配(*.java
当前目录中没有文件),您将获得两种行为之一,具体取决于您的 shell 如何设置来处理不匹配的 globs(这由nullglob
Bash 中的选项控制, 例如):
find
将(请注意)表现出正确的行为。find
将不匹配的 glob 扩展为空字符串,则会抱怨它缺少-name
.小智 29
我遇到了类似的情况,我用引号将 -name 值括起来,但仍然没有得到我希望的所有查找命中。我推测这是因为符号链接,果然确实如此。如果要强制查找通过符号链接进行搜索,可以将命令修改为以下内容:
find -L . -name '*.java'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
138079 次 |
最近记录: |