我的服务器已满,我需要自动删除文件。文件通常每天都会添加到我的服务器中,但有时会出现暂停,使其每两周或每月一次。他们停止进来几个月然后重新开始,这是不可预测的。
我的脚本需要删除超过 30 天的文件,但始终保留它找到的任何文件模式的最新 5 个文件。这是棘手的部分。
关于文件的唯一可预测的事情/模式是文件总是在某处包含一个 yyyymmddhhmmss 时间戳和一些重复的模式,文件名的其他部分并不总是可预测的。如果文件没有时间戳,我不想删除它。
一个示例目录我有这样的东西
20121118011335_team1-pathway_Truck_Report_Data_10342532.zip
20121119011335_team1-pathway_Truck_Report_Data_102345234.zip
20121120011335_team1-pathway_Truck_Report_Data_10642224.zip
20121121011335_team1-pathway_Truck_Report_Data_133464.zip
20121122011335_team1-pathway_Truck_Report_Data_126434344.zip
20121123011335_team1-pathway_Truck_Report_Data_12444656.zip
20121124011335_team1-pathway_Truck_Report_Data_1624444.zip
20121125011335_team1-pathway_Truck_Report_Data_3464433.zip
randomefilewithnodate.zip
20121119011335_team2-Paper_Size_Report_336655.zip
20121120011335_team2- Paper_Size_Report_336677.zip
20121121011335_team2-Paper_Size_Report_338877.zip
20121122011335_team2-Paper_Size_Report_226688.zip
20121123011335_team2-Paper_Size_Report_776688.zip
20121124011335_team2-Paper_Size_Report_223355.zip
20121125011335_team_Size_Report_11111_zipReport_11111_zip
在这种情况下,我的脚本应该只删除第一个模式的最旧的 3 个文件 20121118011335_team1-pathway_Truck_Report_Data_10342532.zip
20121119011335_team1-pathway_Truck_Report_Data_102345234.zip 20121120011335_team1-
pathway_Truck_zip_Data
和第二个模式最旧的 2 个文件
20121119011335_team2-Paper_Size_Report_336655.zip
20121120011335_team2-Paper_Size_Report_336677.zip
这样它会保留 5 个最新文件,并且不会触及没有日期的文件
我的问题是我无法知道 yyyymmddhhmmss_ 究竟会发生什么
到目前为止,如果时间戳存在,我已经想出了匹配的正则表达式,但我想不出如何让我的脚本足够聪明,以检测文件的其余模式并保持 5 天的模式。
欢迎任何想法!下面的脚本并不完美,我可以修复一些小错误。
我真的需要帮助来保存 5 个最新的文件部分,主要是
奖金问题是 epoc 时间部分。
def myCleansingMethod(self, client)
# Get rid of things older than 30 days
# 30 days has this many seconds 30 * 24 * 60 * 60
numberOfSeconds = 2592000
# establish what the epoc time of the oldest file I want to keep is
oldestFileThatIWantToKeep = time.time() - numberOfSeconds
#establish my working directory
workingDirectory = "/home/files/%s" % (client)
try:
files = os.listdir(workingDirectory)
except:
print "Could not find directory"
return
files.sort()
for file in files:
# define Full File Name (path + file)
fullFileName = "%s/%s" % (workingDirectory, file)
# make sure the file contains yyyymmddhhmmss
match = re.search(r'[0-9]{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])([01]\d|2[0123])([0-5]\d){2}', file)
if match:
#get what was matched in the RegEx
fileTime = match.group()
#convert fileTime to Epoc time
fileTimeToEpoc = (fileTime + NOT SURE HOW TO DO THIS PART YET)
if fileTimeToEpoc < oldestFileThatIWantToKeep AND (CODE THAT MAKES SURE THERE ARE AT LEAST 5 FILES OF THE SAME PATTERN PRESENT) :
print "Delete file: %s\t%s" % (fileTimeToEpoc, fullFileName)
command = "rm -Rf %s" % fullFileName
print command
os.system (command)
else:
pass
else:
pass