名称“模式匹配多个模式
我试图通过命令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