#include<iostream>
#include <fstream>
#include<string>
#include<cstring>
#include <dirent.h>
#include<vector>
bool contains_str(const std::string& file_path,std::vector<std::string> filter= {}) {
std::ifstream file(file_path);
std::string line;
while (std::getline(file, line)) {
for(const auto &it:filter)
{
if(line.find(it) != std::string::npos)
{
return true;
}
}
}
return false;
}
static void searchdirRecursion(const std::string &directory_path, std::vector<std::string> &files, std::vector<std::string> filter= {})
{
std::vector<std::string> folders;
DIR* dir = opendir(directory_path.c_str());
if (!dir) {
std::cerr << "Error: Unable to open directory "<< directory_path<< std::endl;
return;
}
dirent* entry;
while ((entry = readdir(dir)) != nullptr) {
// update file_path
std::string file_path = directory_path + "/" + entry->d_name;
if (entry->d_type == DT_REG && contains_str(file_path,filter)) {
std::cout << "Found 'hello' in file: "<< file_path<< std::endl;
} else if (entry->d_type == DT_DIR && entry->d_name[0] != '.') {
searchdirRecursion(file_path, files,filter);
}
}
closedir(dir);
}
int main() {
std::string directory_path = "/home/lighthouse";
std::vector<std::string> files;
std::vector<std::string> filter;
filter.push_back("hello");
searchdirRecursion(directory_path, files, filter);
return 0;
}
linux c++ 查找含有hello的文件
最新推荐文章于 2024-07-13 01:48:03 发布