名称“模式匹配多个模式

我试图通过命令find Documents -name "*.{py,html}"获取目录中所有python和html文件的列表。

接下来是手册页:

模式中的大括号('{}')不被认为是特殊的(即查找。-name'foo {1,2}'匹配名为foo {1,2}的文件,而不是文件foo1和foo2。

由于这是管道链的一部分,我希望能够指定它在运行时匹配哪些扩展(无硬编码)。 如果找不到,perl单行(或类似)就可以。

编辑:我最终提出的答案包括各种废话,也有点长,所以我发布它作为我试图从头开始的原始痒的答案。 如果您有更好的解决方案,请随时解决。


使用-o ,意思是“或”:

find Documents ( -name "*.py" -o -name "*.html" )

编辑 :对不起,只是重新阅读这个问题......你需要以编程方式构建该命令行,这并不容易。

你使用bash(或Windows上的Cygwin)? 如果你是,你应该能够做到这一点:

ls **/*.py **/*.html

这可能更容易以编程方式构建。

编辑 :应用@artbristol评论的答案。


某些版本的查找,主要是在Linux系统上,可能在其他系统上,还支持-regex和-regextype选项,它们查找名称与正则表达式匹配的文件。

例如

find . -regextype posix-egrep -regex ".*.(py|html)$" 

应该在上面的例子中做到这一点。 然而,这不是一个标准的POSIX查找函数,而是依赖于实现。


您可以编程方式添加更多的-name子句,由-or分隔:

find Documents ( -name "*.py" -or -name "*.html" )

或者,换一个简单的循环:

for F in Documents/*.{py,html}; do ...something with each '$F'... ; done
链接地址: http://www.djcxy.com/p/8287.html

上一篇: name` pattern that matches multiple patterns

下一篇: How do I run programs with Strawberry Perl?