/** * Find directories which containing pattern. * @param patterns Search patterns. * @param root_path Search root. * @param recursive_search Be recurse or not. * @return vector or directories without pattern filename at end. */ std::vector<std::string> get_directories_with( const std::vector<std::string> &patterns, const std::string &root_path, const bool recursive_search ) { if( patterns.empty() ) { return std::vector<std::string>(); } const auto ext_beg = std::begin( patterns ); const auto ext_end = std::end( patterns ); auto files = find_file_if_bfs( root_path, recursive_search, [&]( const dirent & entry, bool ) { return std::any_of( ext_beg, ext_end, [&]( const std::string & ext ) { return name_contains( entry, ext, true ); } ); } ); //chop off the file names for( auto &file : files ) { file.erase( file.rfind( '/' ), std::string::npos ); } //remove resulting duplicates files.erase( std::unique( std::begin( files ), std::end( files ) ), std::end( files ) ); return files; }
//-------------------------------------------------------------------------------------------------- std::vector<std::string> get_files_from_path( const std::string &pattern, const std::string &root_path, const bool recursive_search, const bool match_extension ) { return find_file_if_bfs( root_path, recursive_search, [&]( const dirent & entry, bool ) { return name_contains( entry, pattern, match_extension ); } ); }
//-------------------------------------------------------------------------------------------------- std::vector<std::string> get_files_from_path(std::string const &pattern, std::string const &root_path, bool const recurse, bool const match_extension) { return find_file_if_bfs(root_path, recurse, [&](dirent const &entry, bool) { return name_contains(entry, pattern, match_extension); }); }
/** * Find directories which containing pattern. * @param pattern Search pattern. * @param root_path Search root. * @param recursive_search Be recurse or not. * @return vector or directories without pattern filename at end. */ std::vector<std::string> get_directories_with( const std::string &pattern, const std::string &root_path, const bool recursive_search ) { if( pattern.empty() ) { return std::vector<std::string>(); } auto files = find_file_if_bfs( root_path, recursive_search, [&]( const dirent & entry, bool ) { return name_contains( entry, pattern, true ); } ); // Chop off the file names. Dir path MUST be splitted by '/' for( auto &file : files ) { file.erase( file.rfind( '/' ), std::string::npos ); } files.erase( std::unique( std::begin( files ), std::end( files ) ), std::end( files ) ); return files; }