溫馨提示×

linux copendir能否過濾特定目錄

小樊
94
2024-12-28 21:57:09
欄目: 智能運維

copendir() 函數是用于復制一個目錄及其子目錄和文件的

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>

int copendir(const char *src, const char *dest) {
    DIR *src_dir, *dest_dir;
    struct dirent *entry;
    int result;

    // 打開源目錄
    src_dir = opendir(src);
    if (!src_dir) {
        perror("opendir");
        return -1;
    }

    // 創建目標目錄
    result = mkdir(dest, 0777);
    if (result < 0) {
        perror("mkdir");
        closedir(src_dir);
        return -1;
    }

    // 復制目錄內容
    while ((entry = readdir(src_dir)) != NULL) {
        // 過濾特定目錄,例如只復制 "dir1" 和 "dir2"
        if (strcmp(entry->d_name, "dir1") == 0 || strcmp(entry->d_name, "dir2") == 0) {
            char src_entry[PATH_MAX];
            char dest_entry[PATH_MAX];

            snprintf(src_entry, sizeof(src_entry), "%s/%s", src, entry->d_name);
            snprintf(dest_entry, sizeof(dest_entry), "%s/%s", dest, entry->d_name);

            // 如果是目錄,則遞歸復制
            if (entry->d_type == DT_DIR) {
                result = copendir(src_entry, dest_entry);
                if (result < 0) {
                    perror("copendir");
                    closedir(src_dir);
                    return -1;
                }
            } else {
                // 復制文件
                result = copyfile(src_entry, dest_entry);
                if (result < 0) {
                    perror("copyfile");
                    closedir(src_dir);
                    return -1;
                }
            }
        }
    }

    // 關閉源目錄
    closedir(src_dir);

    return 0;
}

在這個示例中,我們使用 strcmp() 函數來檢查目錄項的名稱是否為 “dir1” 或 “dir2”。如果是,我們繼續復制該目錄項。你可以根據需要修改過濾條件。

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