【问题标题】:How can I find the file by its part of name如何通过名称的一部分找到文件
【发布时间】:2013-09-26 15:40:11
【问题描述】:

如何在 c++/linux 中通过名称的一部分找到 a 文件? 文件全名可能如下:

foo.db.1

foo.db.2

如何通过部分名称“foo.db”找到文件,谢谢

【问题讨论】:

    标签: c++ linux file find


    【解决方案1】:

    您的用例的 Posix 标准函数是 glob()。早些时候有人发布了一个易于使用的 C++ 包装器here on Stackoverflow

    【讨论】:

      【解决方案2】:

      例如:

      find /your/path -name "foo.db.*"
      

      它将匹配/your/path结构中名称类似于foo.db.<something>的所有文件。

      如果db.后面的文字总是数字,你可以这样做:

      find /your/path -name "foo.db.[0-9]*"
      

      你也可以使用ls:

      ls -l /your/path/ls.db.[0-9]
      

      获取名称类似于foo.db.<number> 的文件

      ls -l /your/path/ls.db.[0-9]*
      

      获取名称类似于foo.db.<different numbers>的文件

      【讨论】:

      • 谢谢,如何与c++代码结合?我想在 c++ 中获取完整的文件名
      • 其实……人们更好奇的是如何在c++中做到这一点。我猜 bash 通过为找到的不同文件多次运行程序来为我们做到这一点。
      • @fedorqui 直到现在我知道我正在搜索的目录,并且知道 namepattern("foo.db.[0-9]*"),我想让它知道数字是什么在文件名的末尾,比如如果我找到“foo.db.13”,我想知道数字是 13,在 c++ 中,谢谢
      • @user1853170 check rerx answer,我认为这是一个很好的介绍你想要什么。
      【解决方案3】:

      这样做:

      find /filepath -name "foo.db*"
      

      在 C/C++ 中,你可以这样做:

      void findFile(const char *path)
      {
          DIR *dir;
          struct dirent *entry;
          char fileName[] = "foo.db";
      
          if (!(dir = opendir(path)))
              return;
          if (!(entry = readdir(dir)))
              return;
      
          do {
              if (entry->d_type == DT_DIR) {
                  char path[1024];
                  int len = snprintf(path, sizeof(path)-1, "%s/%s", path, entry->d_name);
                  path[len] = 0;
                  if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
                      continue;
      
      
                 if(strstr(fileName, entry->d_name) != NULL) {
                      printf("%s\n",  "", entry->d_name);
                  }
                  findFile(path);
              }
              else
                  printf(" %s\n", "", entry->d_name);
          } while (entry = readdir(dir));
          closedir(dir);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-03-14
        • 2015-06-23
        • 1970-01-01
        • 2012-09-26
        • 2020-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多