我可以有效地限制找到给我的匹配数量吗?
Can I efficiently limit the number of matches find gives me?
我正在将查找应用于包含数万个文件的大型目录树,以查找具有特定名称的所有csv文件,作为面向内部用户的应用程序的一部分。
查找/path/to/dirs -name filename.ext | head -n 100
这需要相当长的时间(在某些情况下长达一分钟),我怀疑只找到前 100 个匹配项(如果没有,则更少)并返回这些匹配项会快得多。这是否可能在不将输出管道到头部的情况下使用 find
(这需要查找所有匹配项)?我在info
页面中没有看到任何引起我注意的选项。如果没有(正如我怀疑的那样),还有其他 unix 工具已经这样做了吗?
或者,如何将罗塞塔代码中的此代码修改为此类工具?
#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++程序员,但我怀疑这段代码可以很容易地被修改成一个 shell 工具的人,该工具接受一个path
参数、一个filename
参数和一个max
参数,并在目录 path
下打印最多max
名为 filename
的文件的完整文件路径。
虽然我不是一个C++程序员,但我今天确实写了一个UNIX工具(在Racket中)来做到这一点。稍后我将尝试发布一些基准测试以将其与find
进行比较。
Q. "这是否可能在不将输出管道到头部的情况下进行查找(这需要查找所有匹配项)"
这是错误的。当head
满意时,它结束,关闭管道。 find
将以 SIGPIPE (13) 退出,因此不需要查找所有匹配项
相关文章:
- 有效地使用std::unordered_map来插入或增加键的值
- 有效地计算多维数组的累积和?
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- 有效地将大数存储为 2 的幂用于路径问题
- 如何正确解析子字符串,以便它们对我的新手计算器有效?
- 如何有效地找到数组中三元组和的最小差异?
- C++有效地找到向量中第一个最接近的匹配值?
- 如何有效地操作满足给定谓词的向量中的所有项目?
- 我怎样才能通过友谊正确地履行我的职能?
- C++程序过早地离开我的 for 循环
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 我可以在移动平台上有效地使用用C/C 编写的数字算法
- 我如何有效地确定两个平行向量的比例因子
- 我如何有效地清理此程序并仍然检测文件输入何时不是字母
- 我可以有效地限制找到给我的匹配数量吗?
- 如果向量a包含与向量b相同的元素,我如何有效地检查
- 在有效地计算数组中第二个元素较少的对时,我哪里错了
- 如果我有 X 的素数分解,我如何有效地获得 X 的所有除数?
- 我如何有效地使用boost asio套接字进行全双工流