如何不使用system()来实现system(“ ls -t1。| tail -n +11 | xargs rm -rf”)。我想在我的linux文件夹中只保留最新的10个文件,当我调用c ++函数时应删除其余的文件。
答案 0 :(得分:1)
这里有些C ++代码不需要存储所有条目,而只记得最旧的10个并删除任何较新的代码。
与删除文件的代码一样,请小心以下代码,如果您运行它会删除文件
#include <filesystem>
#include <vector>
#include <queue>
#include <iostream>
namespace fs = std::filesystem;
using pathvec = std::vector<fs::directory_entry>;
struct newer_file {
bool operator()(const fs::directory_entry& p, const fs::directory_entry& p2)
{
return p.last_write_time() < p2.last_write_time();
}
};
void delete_newest(fs::path directory, int keep_n = 10)
{
//store N oldest entries, delete any that are newer
std::priority_queue<fs::directory_entry, pathvec, newer_file> oldestN;
for (auto entry : fs::directory_iterator(directory))
{
oldestN.push(entry);
if (oldestN.size() > keep_n)
{
//careful, recursive delete
fs::remove_all(oldestN.top());
oldestN.pop();
}
}
}
int main(int argc, const char** argv)
{
if (argc < 2)
{
std::cout << "argument needed" << std::endl;
return -1;
}
delete_newest(fs::path(argv[1]));
return 0;
}