使用Perl查找文件的效率

ajw*_*ood 1 perl glob find

我正在尝试从Perl脚本中的目录树中获取一组文件.有时我可以通过glob扩展来获取它们,但是我只能用正则表达式捕获我需​​要的东西.

例如,我可能希望获得verify/*.finished与shell扩展匹配的所有文件.当我知道"验证"目录所处的深度时,使用glob(<pattern>)比匹配所有内容更快File::Find(例如glob("*/*/*/verify/*.finished"),当我需要依赖正则表达式匹配时,我会有点卡住.

有没有办法通过glob正则表达式的灵活性来提高效率?

Sea*_*ean 6

好吧,您可以生成完整的文件列表glob,然后grep使用正则表达式生成结果:

my @files = grep { /\.finished\z/ } glob '*/*/*/verify/*';
Run Code Online (Sandbox Code Playgroud)

编辑:

如果问题是如果有一个工具像glob一样工作但使用正则表达式,我相信答案是否定的.在完全一般的情况下,我没有看到你有任何选择,但遍历整个目录树,我怀疑你将能够做得更好File::Find.

  • @ajwood,每当有关于一种算法与另一种算法的速度的问题时,你应该尝试[基准测试](http://perldoc.perl.org/Benchmark.html),然后迭代微调以查看你是否能更快找到方法.globbing或File :: Find的替代方法是调用操作系统的`find`命令.它已编译并且非常灵活,因此您可以加快速度.你必须在返回时拆分线,但这可能会更快.同样,基准测试将告诉所有人. (2认同)