サーバーがいっぱいになり、ファイルの削除を自動化する必要があります。通常、ファイルは毎日サーバーに追加されますが、一時停止して隔週または毎月に追加されることもあります。彼らは何ヶ月も入ってこなくなり、その後また始まります。それは予測不可能です。
私のスクリプトは、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_team2-
Paziper_1_11Report_1_11
このような場合、私のスクリプトは最初のパターンの最も古い 3 つのファイルのみを削除する必要が
あり
ます
および 2 番目のパターンの最も
古い 2 つのファイル
このようにして、5つの最新のファイルを保持し、日付のないファイルに触れません
私の問題は、yyyymmddhhmmss_ の後に何が正確に続くかを知る方法がないことです
これまでのところ、タイム スタンプが存在する場合に一致する正規表現を思いつきましたが、ファイルの残りのパターンを検出して 5 日間のパターンを保持するのに十分なほどスマートなスクリプトを取得する方法が思いつきません。
どんなアイデアでも大歓迎です!以下のスクリプトは完璧ではありません。小さな間違いは修正できます。
主に5つの最新ファイルを保持する部分について本当に助けが必要です
おまけの質問はエポックタイムの部分です。
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