清理旧文件的脚本

清理(Linux)本地文件,防止磁盘撑爆;此脚本经过测试没问题。

测试截图:(在有Python解释器的服务器上测试就行)

同时在清理文件的基础上添加了删除空文件夹的一个逻辑,代码很简单。

这个脚本需要配合Azkaban或者Oozie或者DS进行调度,才能达到定时清理旧文件的目的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 保留最近7天的文件(linux本地文件 & 递归遍历)

import os
import time
import sys

# 定义全局变量接收用户传入的参数,args为列表,args[0]为文件名
args = sys.argv

def delete_old_files(directory):
"""
传入给定文件目录,删除该目录下时间超过7天的文件,后续会产生空文件夹
:param directory: 要进行处理的文件目录
:return:
"""
# 获取当前时间
current_time = time.time()
one_week_seconds = 7 * 24 * 60 * 60
# 非递归遍历文件和文件夹
for root, dirs, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
# 获取文件的更新时间(file_stat 为文件状态对象)
file_stat = os.stat(file_path)
print(file_stat.st_mtime)

# 判断文件最后更新时间距离当前时间的差值(两个时间戳相减)
file_age = current_time - file_stat.st_mtime
# 只会删除文件,不会删除文件夹,后面添加逻辑,如果文件夹为空就删除文件目录
if file_age > one_week_seconds:
os.remove(file_path)
print("已删除文件:", file_path)

def delete_empty_folders(directory):
"""
删除上一个函数产生的空文件夹
:param directory: 要删除的空文件夹目录
:return:
"""
# 遍历文件和文件夹
for root, dirs, files in os.walk(directory, topdown=False):
for dir in dirs:
folder_path = os.path.join(root, dir)
# 文件夹为空的逻辑os.listdir = 0
if not os.listdir(folder_path):
os.rmdir(folder_path)
print("已删除空文件夹:", folder_path)

if __name__ == '__main__':
# 给出要处理的本地文件路径(在提交脚本时指定)
directory_path = args[1]
# 删除指定路径下旧文件
delete_old_files(directory_path)
# 删除空文件夹,避免元数据过多
delete_empty_folders(directory_path)