c++ - 如何在不使用 system() 的情况下使用 c++ 删除除最后 10 个文件之外的所有文件
问题描述
如何在不使用 system() 的情况下实现 system("ls -t1 . | tail -n +11 | xargs rm -rf")。我只想在我的 linux 文件夹中保留最新的 10 个文件,当我调用 c++ 函数时,其余的应该被删除。
解决方案
这是一些不需要存储所有条目的 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;
}
推荐阅读
- php - 希腊字母被替换为??? 一旦我使用 PHPWord 将 docx 转换为 pdf?
- python - Python NaN 的集合和唯一性
- python - 我如何有效地将python3列表更改为golang多维数组?
- sql - 动态 sql 和 sp_executesql 类型的 MS SQL 问题
- python - 在 pandas 中跨不同文件维护标签编码
- python - 我正在尝试清理我下载的图像以仅检测那些检测到 >=2 眼睛的图像
- reactjs - 发送错误凭据时如何禁用 Spring Security 弹出窗口
- tensorflow - Tensorflow 2.2 需要很长时间才能启动
- server - 如何使用jsp连接到mysql
- assembly - 汇编/汇编语言中的二进制计时器。需要一些代码改进