zoukankan      html  css  js  c++  java
  • linux 下按照文件名模糊查找文件

    fnmatch

    int fnmatch(const char *pattern, const char *string, int flags);
    

    参数说明

    FNM_NOESCAPE
    如果这个标志设置了,处理反斜杠为普通字符,而不是转义字符。
    FNM_PATHNAME
    如果这个标志设置了,string 里的斜杠只匹配 pattern 里的斜杠,它不能匹配星号(*)或问号(?)元字符,也不能匹配包含斜杠的中括号表达式([])
    FNM_PERIOD
    如果这个标志设置了,string 里的起始点号必须匹配 pattern 里的点号。一个点号被认为是起始点号,如果它是string 第一个字符,或者如果同时设置了 FNM_PATHNAME,紧跟在斜杠后面的点号。
    FNM_FILE_NAME
    这是 FNM_PATHNAME 的 GNU 同义语。
    FNM_LEADING_DIR
    如果这个标志(GNU 扩展)设置了,模式必须匹配跟随在斜杠之后的 string 的初始片断。这个标志主要是给 glibc 内部使用并且只在一定条件下实现。
    FNM_CASEFOLD
    如果这个标志(GNU 扩展)设置了,模式匹配忽略大小写。

    返回值

    0:string 匹配 pattern;
    FNM_NOMATCH:没有匹配;或者其它非零值,如果出错。

    示例

    示例代码如下:

    #include <fnmatch.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <vector>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    
    vector<string> WildcardSearch(const char* pattern,const char* filePath)
    {
    	vector<string> res;
    	struct dirent *entry;
    	DIR *dir;	
    	int ret;
    
    	dir = opendir(filePath);
    	if(dir != NULL)
    	{
    		while((entry = readdir(dir)) != NULL)
    		{
    			ret = fnmatch(pattern,entry->d_name,FNM_PATHNAME | FNM_PERIOD);
    			if(ret == 0)
    			{
    				res.push_back(entry->d_name);				
    			}
    			else
    			{
    				continue;
    			}
    		}
    	
    	}
    
    	closedir(dir);
    	return res;
    }
    
    
    int main(int argc,char*argv[])
    {
    	vector<string> tmp;
    	char* pattern = argv[1];
    	char* path = argv[2];
    	
    	tmp = WildcardSearch(pattern,path);
    
    	for(int i=0;i<tmp.size();i++)
    		cout<<tmp[i]<<endl;
    
    	return 0;
    }
    

    例如:

    ./test "2018-*.bmp" ./path
    
  • 相关阅读:
    Rainmeter 雨滴桌面 主题分享
    行人检測之HOG特征(Histograms of Oriented Gradients)
    const和readonly差别
    ADB命令解析
    Java实现 蓝桥杯VIP 算法训练 接水问题
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
  • 原文地址:https://www.cnblogs.com/chay/p/11353577.html
Copyright © 2011-2022 走看看