linux定时删除N天前的文件(文件夹)

在业务中,给定的磁盘容量小,为了避免爆盘,需要定时清除数据,所以总结了一下设置方法:可以使用find命令

find 路径 -mtime +天数 -type d -name "文件名" -exec rm -rf {} ;

find 路径 -mtime +15-type d -name "*" -exec rm -rf {} ;
find /tmp -mtime +15 -type d -name "*" -exec rm -rf {} \;
/tmp --设置查找的目录;
-mtime +15 --设置修改时间为15天前;
-type d --设置查找的类型为文件;其中f为文件,d则为文件夹
-name "*" --设置文件名称,可以使用通配符;
-exec rm -rf --查找完毕后执行删除操作;
 {} \; --固定写法

二、还可以把此命令写入脚本中
1、创建脚本cleandata.sh

vim cleandata.sh

2、写入命令

find /tmp -mtime +15 -type d -name "*" -exec rm -rf {} \;

3、保存文件

按Esc键

:wq  #保存

4、配置可执行

chmod u+x ./cleandata.sh

 5、配置到crontab

crontab -e
#每天九点十五自动执行
15 9 * * *  /home/test/cleandata.sh > /dev/null 2>&1
*号解释:
第一个*号表示时间中的 分钟  取值范围:0-59
第二个*号表示时间中的 小时  取值范围:0-23
第三个*号表示一个月中的第几天,取值范围:1-31
第四个*号表示一年中的第几个月,取值范围:1-12
第五个*号表示一个星期中的第几天,以星期天开始依次的取值为0~7,0、7都表示星期天

以上已经配置完成,亲测有效 

---------------------------------------------------------------------------------------------------------------------------------

 linux定时删除时间格式文件夹

#!/bin/bash

function deletedir(){
    ago_file=$(date -d '30 days ago' +%Y%m%d)
        dir_or_file=$1
        if [ -d $dir_or_file ]
        then
            for element_date in `ls $dir_or_file`
            do
                dir_or_file_date=$dir_or_file"/"$element_date
                if [ -d $dir_or_file_date ]
                then
                        date_file=$(date -d $element_date +%Y%m%d)
                        if [ $date_file -lt $ago_file ]
                        then
                                rm -rf $dir_or_file_date
                        fi
                fi
            done
        fi
}
root_dir="/data0/test"
deletedir $root_dir

<think>嗯,用户想要用Python定时统计文件夹下每个子文件夹的大小,并以GB为单位显示出来。首先,我需要明确用户的具体需求。他们可能需要监控某个目录下的各个子目录占用空间的情况,可能是为了磁盘清理或者资源管理。接下来,我得考虑如何实现这个功能。 首先,得确定如何获取子文件夹的大小。Python中可以用os模块来遍历目录,os.walk可以递归遍历所有文件和子目录。然后,对于每个子文件夹,需要计算其下所有文件的总大小。这里可能需要用到os.path.getsize来获取单个文件的大小,然后累加。 不过,直接遍历每个子文件夹可能会比较慢,尤其是当目录结构很深或者文件很多的时候。不过用户可能只是需要定期执行,所以性能可能不是首要问题,但还是要尽量高效。 接下来,定时执行。Python中有几种定时任务的方法,比如使用time.sleep结合循环,或者更高级的sched模块,或者第三方库如APScheduler。考虑到用户可能不想安装额外的库,使用time.sleep可能更简单。比如,每隔一定时间执行一次统计。 然后,输出格式需要是“文件夹1-大小,文件夹2-大小”这样的形式,单位是GB。要注意的是,文件大小计算出来是字节,需要转换为GB,即除以1024^3。另外,格式化输出,可能保留两位小数比较合适。 还有需要考虑的是,用户的主文件夹路径是什么,是否需要通过参数输入,或者硬编码在脚本里。可能更好的做法是让用户自己修改路径,或者在运行时传入参数。不过对于初学者来说,可能直接在脚本里指定更简单,但用户可能需要指导如何修改路径。 另外,异常处理也很重要。比如,有些子文件夹可能没有访问权限,或者在被统计时被删除,这时候程序应该能处理异常,跳过无法访问的目录,而不是崩溃。 现在,把这些思路整合成一个脚本的结构。大致步骤如下: 1. 导入必要的模块:os,time。 2. 定义主文件夹路径,比如path = '/path/to/directory'。 3. 定义获取文件夹大小的函数,用os.walk遍历,累加文件大小。 4. 处理异常,避免权限问题。 5. 定时循环:使用while循环,内部执行统计,打印结果,然后sleep一段时间。 6. 格式化输出,转换为GB,保留两位小数。 可能的代码结构: - 使用os.listdir遍历主目录下的子文件夹,过滤出目录。 - 对每个子目录,调用获取大小的函数。 - 将字节转换为GB。 - 输出结果,按照用户指定的格式。 测试一下这个逻辑是否正确。比如,假设主目录下有三个子文件夹,分别有不同的文件,统计它们的大小,并正确显示为GB单位。另外,处理隐藏文件夹或者系统文件夹的情况,是否需要排除?用户可能需要所有子文件夹,包括隐藏的,所以不需要特别处理,除非用户另有要求。 关于定时,比如每60秒执行一次,用户可以根据需要调整间隔。在代码中用time.sleep(60)来实现。 最后,考虑代码的可读性和用户是否需要注释。添加必要的注释,让用户了解如何修改路径和间隔时间。 总结步骤: 1. 遍历指定目录下的所有子文件夹。 2. 计算每个子文件夹的总大小。 3. 定时执行该统计任务。 4. 格式化输出结果。 现在,编写代码时需要注意路径的处理,确保使用绝对路径,或者在相对路径时用户清楚当工作目录。另外,处理大数字时的除法,避免整数除法的问题,所以需要用浮点数转换。 可能的问题点:在Windows和Linux下路径的表示方法不同,用户可能需要修改斜杠方向。此外,获取文件夹大小时,os.walk会不会遍历符号链接?默认情况下,os.walk不会跟随符号链接,但如果有需要,可能需要调整参数,但用户可能不需要处理这种情况,暂时不考虑。 最后,测试代码是否能够正确运行,并给出示例输出,让用户知道效果。</think>以下是一个Python实现定时统计文件夹大小的解决方案,按照步骤分解说明: --- ### 一、实现思路 1. **遍历文件夹**:获取目标路径下所有子文件夹 2. **计算大小**:递归统计每个子文件夹的总大小 3. **单位转换**:将字节(Byte)转换为GB 4. **定时任务**:使用`sched`模块实现定时统计 5. **格式化输出**:按`文件夹-大小(GB)`格式展示结果 --- ### 二、完整代码 ```python import os import time import sys def get_folder_size(folder_path): """递归计算文件夹大小(单位:字节)""" total_size = 0 for dirpath, dirnames, filenames in os.walk(folder_path): for f in filenames: fp = os.path.join(dirpath, f) try: total_size += os.path.getsize(fp) except OSError: # 跳过无法访问的文件 continue return total_size def bytes_to_gb(size_bytes): """字节转GB(保留2位小数)""" return round(size_bytes / (1024 ** 3), 2) def monitor_folder(path, interval=60): """定时监控文件夹大小""" while True: print("\n=== 文件夹大小统计(单位:GB)===") folders = [f for f in os.listdir(path) if os.path.isdir(os.path.join(path, f))] for idx, folder in enumerate(folders, 1): full_path = os.path.join(path, folder) size_bytes = get_folder_size(full_path) size_gb = bytes_to_gb(size_bytes) print(f"文件夹{idx}: {folder} - {size_gb}GB") print("===============================") time.sleep(interval) if __name__ == "__main__": if len(sys.argv) > 1: target_path = sys.argv[1] else: target_path = "/path/to/your/directory" # 修改为你的目标路径 if not os.path.isdir(target_path): print("错误:路径不存在或不是文件夹") else: monitor_folder(target_path) ``` --- ### 三、使用说明 1. **修改路径**: - 直接修改代码中的`target_path` - 或通过命令行参数指定:`python script.py /your/target/path` 2. **调整间隔**: - 修改`monitor_folder()`的`interval`参数(默认60秒) 3. **运行效果**: ``` === 文件夹大小统计(单位:GB)=== 文件夹1: Documents - 15.32GB 文件夹2: Downloads - 42.15GB 文件夹3: Pictures - 8.76GB =============================== ``` --- ### 四、关键点说明 1. **异常处理**: - 跳过无权限访问的文件 - 验证输入路径有效性 2. **性能优化**: - 使用`os.walk`递归遍历 - 避免重复计算(单次遍历统计) 3. **扩展性**: - 可添加日志记录功能 - 可设置阈值告警 - 可生成可视化报告(需结合matplotlib等库) --- ### 五、定时方案对比 | 方法 | 优点 | 缺点 | |--------------------|----------------------|----------------------| | `time.sleep`循环 | 简单易用 | 单线程阻塞 | | `sched`模块 | 精确调度 | 配置稍复杂 | | APScheduler库 | 功能强大 | 需要安装第三方库 | 当实现选择了最简单的`time.sleep`方案,如需更复杂的调度需求可以改用APScheduler。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wd520521

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值