[C++] 135 FLTK : Final Cut Proのライブラリ掃除

[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE, C++17]

Final Cut ProのライブラリにあるHigh Quality Mediaディレクトリの中身を削除する機能をビデオツールアプリに追加しました。

これでライブラリ肥大化の原因であるHigh Quality Mediaディレクトリが全て空になります。

#include <sys/stat.h>

vector<string> getFilePath(string dir, string ext) {
    glob_t globbuf;
    vector<string> files;

    string suffix = "/*." + ext;
    cout << "suffix " << suffix << endl;

    glob((dir + suffix).c_str(), 0, NULL, &globbuf);

    for (int i = 0; i < globbuf.gl_pathc; i++) {
        files.push_back(globbuf.gl_pathv[i]);
    }

    globfree(&globbuf);

    return files;
}

vector<string> getDirPath(string dir) { // 再帰的に検索
    vector<string> dirs;

    for (const std::filesystem::directory_entry& dir_entry : std::filesystem::recursive_directory_iterator(dir)) {
        if (dir_entry.is_directory()){
            dirs.emplace_back(dir_entry.path().string());
        }
    }
    return dirs;
}

void FCPClean(){
    string dirPath = "/movie"; // ライブラリ保存ディレクトリ
    vector<string> paths = getFilePath(dirPath, "fcpbundle");

    int num = 1;
    for (string path:paths){
        cout << num << " " << path << endl;

        vector<string> dirs = getDirPath(path);

        int num2 = 1; 
        for (string dir:dirs){

            if (dir.find("High Quality Media") != std::string::npos){
                cout << "High Quality Mediaディレクトリ " << num2 << " " << dir << endl;

                struct stat statBuf;
                int detect = stat(dir.c_str(), &statBuf);
                if (detect == 0){
                    vector<string> dirs2 = getDirPath(dir);
                    for (string dir:dirs2){
                        cout << "削除対象dir " << dir << endl;
                        std::filesystem::remove_all(dir);
                    }
                } else {
                    cout << "ディレクトリはありません" << endl;
                }
                num2 += 1;
            }
        }
        num += 1;
    }
    output_line->insert("FCP Clean完了!\n");
}
--------------------------------------------------
出力例
--------------------------------------------------
suffix /*.fcpbundle
1 /movie/blog.fcpbundle
High Quality Mediaディレクトリ 1 /movie/blog.fcpbundle/programming/Render Files/High Quality Media
削除対象dir /movie/blog.fcpbundle/programming/Render Files/High Quality Media/testA
削除対象dir /movie/blog.fcpbundle/programming/Render Files/High Quality Media/testB
High Quality Mediaディレクトリ 2 /movie/blog.fcpbundle/programming/Render Files/High Quality Media/testA
ディレクトリはありません
High Quality Mediaディレクトリ 3 /movie/blog.fcpbundle/programming/Render Files/High Quality Media/testB
ディレクトリはありません

22/8/13追記:
改良版を作成しました。