到达一定数量文件自动删除最久时间文件,C语言获取shell命令结果

本文介绍了一种使用Shell脚本和C语言实现的自动化文件管理方案,包括删除指定目录中超过设定数量的旧文件,以及获取最早创建的文件、文件大小和磁盘空间信息的方法。同时提供了一行Shell命令来删除特定目录下超过15天的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/bash
#rm_file>14day

ReservedNum=4                      #保留文件数量
rm_file_dir='/home/sean/sean/rmfile'  #需要删除文件的路径

cd $rm_file_dir    #进入文件夹
RootDir=$(cd $(dirname $0); pwd)      #当前文件路径 
FileNum=$(ls -l | grep ^- | wc -l)    #查找文件数量
OldFile=$(ls -rt *.dmp|head -1)         #找出dmp最早文件
if [ $RootDir == $rm_file_dir ];then   #判断所在目录是否正确
    echo $RootDir                              
    echo $rm_file_dir
    while (($FileNum>$ReservedNum))  #文件数超过设置变量才执行
    do
    echo "Delete File:"$RootDir'/'$OldFile   #打印要删除的文件名称
    rm -f $RootDir'/'$OldFile                       #删除文件
    let "FileNum--"                                      #变量自减操作
    OldFile=$(ls -rt *.dmp|head -1)         #更新dmp最早文件
    done
else
    echo "error file path "                         #所在目录不对打印出路径错误
fi

转载自https://www.cnblogs.com/xiaomj/p/9232145.html

下面是自己改编的C语言版本:

 



#include "common.h"
 
int main()
{
    //获取时间最早文件
	char buf[4096] = {0};
	FILE *pf = NULL;
	
	if( (pf = popen("ls -rt *|head -1", "r")) == NULL )
	{
		return -1;
	}
 
	char strResult[4096];

	fgets(strResult, sizeof(strResult), pf);
	
	pclose(pf);
	strResult[strlen(strResult)-1]='\0';  //delete the '\n'
	printf(	"the filename: %s\n",strResult);


    //获取文件的大小
	struct stat statbuf;
   	stat("/home/bekl/swapfile",&statbuf);
   	printf("the file size:%ld\n",statbuf.st_size);

    
    //获取文件所属磁盘空间
	memset(strResult,0,4096);
	if( (pf = popen("df .", "r")) == NULL )
	{
		return -1;
	}
	fgets(strResult, sizeof(strResult), pf);
	fgets(strResult, sizeof(strResult), pf);
	strResult[strlen(strResult)-1]='\0';//delete the '\n'
	printf("%s\n",strResult);
	char fileSystem[20]="";
	unsigned long int allSize = 0, usedSize = 0, availableSize = 0;
	sscanf(strResult,"%s %ld %ld %ld",fileSystem,&allSize,&usedSize,&availableSize);
	printf("fileSystem:%s,all:%ld,used:%ld,available:%ld\n",fileSystem,allSize,usedSize,availableSize);
    pclose(pf);
	
}

用一句shell命令可以删除文件:

find ./log -name '*' -mtime +15 -exec rm {} >>/dev/null 2>/dev/null \\;

删除./log文件夹下超过15天的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值