[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追記:
改良版を作成しました。