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
    
  • 相关阅读:
    吴裕雄--天生自然 诗经:离思五首·其四
    吴裕雄--天生自然 诗经:江城子·乙卯正月二十日夜记梦
    CentOS6—启动httpd失败—Certificate has expired
    paper—SCI—Examples of author responses to reviewer comments
    paper—SCI答复审稿人的回信技巧
    mysql android—Installation using AndroPHP
    linux socket c : send data when socket close—SIGPIPE, Broken pipe
    Firefox:曾经打破黑暗的产品
    mysql中datetime到time_t转换
    mysql datetime 时间比较
  • 原文地址:https://www.cnblogs.com/chay/p/11353577.html
Copyright © 2011-2022 走看看