0

我有一台服务器,我需要从该服务器中删除特定文件夹中的文件和文件夹,我想每 3 个月删除一次,我已经知道如何使用 crontab 和 python 来做到这一点,问题是,我只想要删除 3 个月或更长时间的文件或文件夹。

我用来删除文件和文件夹的python代码是这样的:

import os
import shutil
path = '/path/to/folder'

for root, dirs, files in os.walk(path):
        for f in files:
                os.unlink(os.path.join(root, f))
        for d in dirs:
                shutil.rmtree(os.path.join(root,d))

我现在想要的是获取上次修改的每个文件和文件夹月份,并将其与我所在的当前月份进行比较,然后当且仅当其“年龄”大于或等于 3 个月时才将其删除。

有什么帮助吗?

4

2 回答 2

0

在 posix 上执行此操作的正常方法是文件:

find path -mtime +90 -a -type f -a -exec rm "{}" \; 

对于文件夹:

find path -mtime +90 -a -type d -a -exec rm -r "{}" \; 

但是当然你需要小心任何 rm -r!如果感兴趣的文件夹没有嵌套,这更安全:

find path -mtime +90 -a -type d -a -exec rmdir "{}" \; 

在 python 中,shell exec 为此。它不是一个跨平台的纯 python 解决方案。

于 2013-10-18T02:01:29.753 回答
0

所以,这就是答案。

我不是删除超过 3 个月的文件,而是删除超过 6 个月的文件和文件夹。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, glob, shutil, time, datetime
path = glob.glob('/home/piratinha/*')
now  = time.time()
now_str = datetime.datetime.fromtimestamp(now).strftime('%d-%m-%Y %H:%M:%S')
print now_str
for f in path:
    if os.stat(f).st_mtime < now - (6 * 30 * 86400):
        if os.path.isfile(f):
            print "Removendo", f
            os.remove(f)
            print "Arquivo Removido"
        else:
            print "Removendo", f
            shutil.rmtree(f)
            print "Pasta Removida"
else:
    print   "Todos os arquivos e pastas são mais novos do que 6 meses."

print now_str

BR,

红码

于 2015-06-22T19:43:34.537 回答