为什么“find -name *.jks”不返回某些文件?

为什么“find -name *.jks”不返回某些文件?
find . -name *.jks -print 2>/dev/null

返回扩展名的文件杰克斯那样做没有下划线作为他们名字的一部分。令我惊讶的是,我刚刚发现 * 不能替代下划线。

find . -name *_*.jks -print 2>/dev/null

返回扩展名的文件杰克斯有一个下划线

如何搜索包含 0 个或多个下划线的文件?使用 OSX Mountain Lion。

答案1

我知道的所有版本find都会将下划线与通配符匹配。

做的时候要注意。

find . -name *.jks -print 2>/dev/null

*.jks在运行 find 命令之前,“ ”可能会被 shell 扩展。

例如

$ mkdir foo
$ touch a.jks foo/a.jks foo/b.jks
a.jks
$ find . -name *.jks -print
./a.jks
./foo/a.jks

这实际上是因为您实际上正在调用find . -name a.jks -print,因此它不会找到例如b.jks

如果你引用通配符表达式,你可能会更幸运:

$ find . -name "*.jks" -print
./a.jks
./foo/a.jks
./foo/b.jks

我很确定运行

$ find . -name "*.jks" -print

将为您提供所有带下划线和不带下划线的文件。

相关内容