我可以有效地限制发现给我的匹配数量吗?

时间:2016-02-18 14:53:28

标签: c++ unix boost find

我正在将find应用于包含数万个文件的大型目录树,以查找具有特定名称的所有csv文件,作为面向内部用户的应用程序的一部分。

  

find / path / to / dirs -name filename.ext |头-n 100

这花费了相当长的时间(在某些情况下长达一分钟),我怀疑只找到前100场比赛(或者如果没有的话,那么会更快)并返回那些比赛。 find是否可以将输出汇总到头部(这需要查找所有匹配项)?在info页面中,我没有看到任何引起我注意的选项。如果不是(我怀疑),还有其他任何unix工具吗?

或者,如何将此代码从Rosetta Code修改为此类工具?

#include "boost/filesystem.hpp"
#include "boost/regex.hpp"
#include <iostream>

using namespace boost::filesystem;

int main()
{
  path current_dir("."); //
  boost::regex pattern("a.*"); // list all files starting with a
  for (recursive_directory_iterator iter(current_dir), end;
       iter != end;
       ++iter)
  {
    std::string name = iter->path().filename().string();
    if (regex_match(name, pattern))
      std::cout << iter->path() << "\n";
  }
}

我必须承认我不是C ++程序员,但是我怀疑这个代码可以很容易地被一个使用path参数,filename参数的shell工具的人修改,和max参数以及目录max下名为filename的最多path个文件的打印完整文件路径。

虽然我不是C ++程序员,但我今天写了一个UNIX工具(在Racket中)。我稍后会尝试发布一些基准,将其与find进行比较。

1 个答案:

答案 0 :(得分:1)

  

问。&#34;如果没有将输出汇总到头部(这需要查找所有匹配项),这是否可行?&#34;

那是假的。当head满足时,它结束,关闭管道。 find将退出SIGPIPE(13),因此不需要查找所有匹配