我试图用命令查找文档名称“*.{py,html}”来获得目录中所有python和html文件的列表。
然后出现了手册页:
模式('{}')中的大括号不被认为是特殊的(即find。name 'foo{1,2}'匹配一个名为foo{1,2}的文件,而不是文件foo1和foo2。
由于这是管道链的一部分,我希望能够在运行时指定它匹配的扩展(不硬编码)。如果find不能做到这一点,perl一行程序(或类似程序)就可以了。
编辑:我最终想出的答案包括各种各样的废话,而且也有点长,所以我把它作为我最初试图解决的问题的答案。如果你有更好的解决方案,请随意修改。
这将找到linux上所有的。c或。cpp文件
$ find . -name "*.c" -o -name "*.cpp"
你不需要转义的括号,除非你做一些额外的mod。在手册页中,他们说如果模式匹配,就打印它。也许他们正试图控制印刷业。在这种情况下,-print作为一个条件,并成为一个“and 'd”条件。它将阻止任何。c文件被打印。
$ find . -name "*.c" -o -name "*.cpp" -print
但如果你喜欢原来的答案,你可以控制打印。这也会找到所有的。c文件。
$ find . \( -name "*.c" -o -name "*.cpp" \) -print
最后一个示例用于所有c/c++源文件
$ find . \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print