溫馨提示×

如何用copendir實現Linux目錄的過濾

小樊
43
2025-09-13 10:41:30
欄目: 智能運維

在 Linux 中,opendir() 函數用于打開一個目錄流,以便讀取目錄中的文件和子目錄。要實現目錄過濾,您可以使用 readdir() 函數遍歷目錄,并使用 fnmatch() 函數或正則表達式來過濾所需的文件和目錄。

以下是一個簡單的示例,展示了如何使用 opendir()、readdir()fnmatch() 實現目錄過濾:

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <fnmatch.h>
#include <string.h>

int main(int argc, char *argv[]) {
    if (argc != 3) {
        fprintf(stderr, "Usage: %s <directory> <pattern>\n", argv[0]);
        return EXIT_FAILURE;
    }

    const char *dir = argv[1];
    const char *pattern = argv[2];

    DIR *dp = opendir(dir);
    if (!dp) {
        perror("opendir");
        return EXIT_FAILURE;
    }

    struct dirent *entry;
    while ((entry = readdir(dp))) {
        if (fnmatch(pattern, entry->d_name, 0) == 0) {
            printf("%s\n", entry->d_name);
        }
    }

    closedir(dp);
    return EXIT_SUCCESS;
}

在這個示例中,程序接受兩個命令行參數:要遍歷的目錄和要匹配的模式。然后,它使用 opendir() 打開目錄,并使用 readdir() 遍歷目錄中的每個條目。對于每個條目,它使用 fnmatch() 函數檢查條目名稱是否與給定的模式匹配。如果匹配,則打印條目名稱。

要編譯此程序,請使用以下命令:

gcc -o filter_directory filter_directory.c

然后,您可以使用以下命令運行程序,其中 <directory> 是要遍歷的目錄,<pattern> 是要匹配的模式:

./filter_directory <directory> <pattern>

例如,要列出目錄中所有以 .txt 結尾的文件,您可以運行:

./filter_directory /path/to/directory "*.txt"

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女