linux 文件管理

简介: 获取linux某个磁盘的剩余容量,可以根据目录或文件的日期去删除文件

1、查看磁盘剩余容量

int get_free_memory(const char* path, uint64_t* total, uint64_t* free)
{
   
    struct statfs diskInfo;
    int ret = statfs(path, &diskInfo);
    if (ret < 0)
    {
   
        printf("statfs = -1\r\n");
        return -1;
    }
    unsigned long long blocksize = diskInfo.f_bsize;// 每个block里面包含的字节数
    unsigned long long totalsize = blocksize * diskInfo.f_blocks;//总的字节数
    *total = totalsize;
    char totalsize_GB[10] = {
    0 };
    //printf("TOTAL_SIZE == %llu KB  %llu MB  %llu GB\n", totalsize >> 10, totalsize >> 20, totalsize >> 30); // 分别换成KB,MB,GB为单位
    sprintf(totalsize_GB, "%.2f", (float)(totalsize >> 20) / 1024);
    //printf("totalsize_GB=%s\n", totalsize_GB);
    unsigned long long freesize = blocksize * diskInfo.f_bfree; //再计算下剩余的空间大小
    *free = freesize;
    //printf("DISK_FREE == %llu KB  %llu MB  %llu GB\n", freesize >> 10, freesize >> 20, freesize >> 30);
    unsigned long long usedsize = blocksize * (diskInfo.f_blocks - diskInfo.f_bfree);
    char usedsize_GB[10] = {
    0 };
    sprintf(usedsize_GB, "%.2f", (float)(usedsize >> 20) / 1024);
    //printf("usedsize_GB=%s\n", usedsize_GB);
    return 0;
}

2、删除文件

void delete_directory(const char* path) {
   
    DIR* dir = opendir(path);
    struct dirent* entry;
    while ((entry = readdir(dir)) != NULL) {
   
        // check if entry is a directory
        if (entry->d_type == DT_DIR) {
   
            // skip . and ..
            if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
   
                continue;
            }
            // delete subdirectory
            char sub_path[1000];
            snprintf(sub_path, sizeof(sub_path), "%s/%s", path, entry->d_name);
            delete_directory(sub_path);
        }
        else {
   
            // delete file
            char file_path[1000];
            snprintf(file_path, sizeof(file_path), "%s/%s", path, entry->d_name);
            remove(file_path);
        }
    }
    closedir(dir);
    rmdir(path);
}

3、删除给定时间前的文件

void deleteOldFiles(const char* directoryPath, int daysThreshold) {
   
    DIR* dir = opendir(directoryPath);
    if (dir == NULL) {
   
        printf("Failed to open directory: %s\n", directoryPath);
        return;
    }
    struct dirent* entry;
    struct stat fileStat;
    char filePath[1024];
    time_t currentTime = time(NULL);
    time_t threshold = (daysThreshold * 24 * 60 * 60);

    while ((entry = readdir(dir)) != NULL) {
   
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
            continue;
        snprintf(filePath, sizeof(filePath), "%s/%s", directoryPath, entry->d_name);
        if (stat(filePath, &fileStat) == -1) {
   
            printf("Failed to get file stats: %s\n", filePath);
            continue;
        }

        if ( difftime(currentTime, fileStat.st_mtime) > threshold) {
   
            delete_directory(filePath); 
        }
        else
        {
   
            //printf("file: %s   ,%d:%d,%f,threshold%ld\n", filePath, S_ISREG(fileStat.st_mode), S_ISDIR(fileStat.st_mode), difftime(currentTime, fileStat.st_mtime), threshold);
        }

    }

    closedir(dir);
}
相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
5月前
|
存储 Shell Linux
【Shell 命令集合 文件管理】Linux 读取命令 read命令使用指南
【Shell 命令集合 文件管理】Linux 读取命令 read命令使用指南
81 0
|
5月前
|
监控 网络协议 Shell
【Shell 命令集合 文件管理】Linux 远程文件复制命令 rcp 命令使用教程
【Shell 命令集合 文件管理】Linux 远程文件复制命令 rcp 命令使用教程
74 0
|
5月前
|
Shell Linux C语言
【Shell 命令集合 文件管理】Linux 删除 rm命令使用指南
【Shell 命令集合 文件管理】Linux 删除 rm命令使用指南
119 0
|
5月前
|
安全 Shell Linux
【Shell 命令集合 文件管理】Linux ssh 远程主机之间复制文件 scp 命令使用教程
【Shell 命令集合 文件管理】Linux ssh 远程主机之间复制文件 scp 命令使用教程
140 0
|
5月前
|
存储 Shell Linux
【Shell 命令集合 文件管理】Linux 快速定位文件和目录 slocate命令使用教程
【Shell 命令集合 文件管理】Linux 快速定位文件和目录 slocate命令使用教程
62 0
|
2月前
|
存储 Linux Shell
Linux 导航和文件管理
Linux 导航和文件管理
15 0
|
4月前
|
Linux C++
Linux文件管理命令(一)
这是关于Linux命令行的一些内容,主要包括了一些常见的Linux命令及其参数的用法。例如,`ls` 命令用于列出目录内容,不同的参数如 `-a` 显示所有文件(包括隐藏文件),`-l` 以详细模式显示,`-S` 按大小排序等。`mkdir` 命令用于创建目录,`cp` 命令用于复制文件或目录,`mv` 命令用于移动或重命名文件或目录,而`rm` 命令则用于删除文件或目录。在使用这些命令时,可以结合不同的参数来实现不同的操作。
|
4月前
|
Linux Windows
Linux文件管理命令(二)
`Linux`文件管理涉及`ls`显示目录内容,`cd`切换目录,`pwd`显示当前目录,`whoami`显示当前用户,`hostname`显示主机名,目录使用正斜杠 `/` 分隔,根目录始于第一个 `/`。`man`命令用于获取命令帮助,如`man ls`,也可用`--help`参数,如`ls --help`。常用快捷键包括`Ctrl+C`取消操作,`Ctrl+L`清屏,`Ctrl+D`退出用户,`Ctrl+A`移动光标到行首,`Ctrl+E`移动到行尾。查看`PATH`环境变量用`echo $PATH`。
|
5月前
|
存储 搜索推荐 Linux
|
5月前
|
Linux 开发者
Linux技术基础(6)——文件管理
这是一个关于文件管理的实验指南,涵盖了`cat`, `cmp`, `diff`, `file`和`find`五个Linux命令。`cat`用于查看和操作文件内容,例如打印、连接和清空文件。`cmp`比较两个文件的差异,`diff`同样比较文件差异但提供更详细输出。`file`识别文件类型,而`find`则在指定目录中搜索文件。实验可在阿里云开发者平台的给定链接进行。
下一篇
无影云桌面