删除超过 7 天的文件

Posted

技术标签:

【中文标题】删除超过 7 天的文件【英文标题】:Delete files that are older than 7 days 【发布时间】:2016-09-20 19:39:39 【问题描述】:

我看过一些帖子删除特定文件夹中的所有文件(不是文件夹),但我根本不明白。

我需要使用 UNC 路径并删除所有超过 7 天的文件。

 Mypath = \\files\data\APIArchiveFolder\

是否有人有快速脚本,他们可以专门输入上面的路径来删除所有超过 7 天的文件?

【问题讨论】:

旧是指“创建日期”、“修改日期”还是“最后访问”? 检查this和this 【参考方案1】:

基于 Vadim 解决方案的更灵活的方法 请记住 os.unlink(fileWithPath) 会删除该文件夹中超过 X 天的所有内容,所以要小心。

############ DELETE OLDER THAN X ############
current_time = time.time()
daysToDelete = 7
directory = '/absolute/path/to/folder/'

for dirpath,_,filenames in os.walk(directory):
    for f in filenames:
        fileWithPath = os.path.abspath(os.path.join(dirpath, f))
        creation_time = os.path.getctime(fileWithPath)
        print("file available:",fileWithPath)
        if (current_time - creation_time) // (24 * 3600) >= daysToDelete:
            os.unlink(fileWithPath)
            print(' removed'.format(fileWithPath))
            print("\n")
        else:
            print(' not removed'.format(fileWithPath))

【讨论】:

【参考方案2】:

此代码删除当前工作目录中 >= 7 天前创建的文件。风险自负。

import os
import time

current_time = time.time()

for f in os.listdir():
    creation_time = os.path.getctime(f)
    if (current_time - creation_time) // (24 * 3600) >= 7:
        os.unlink(f)
        print(' removed'.format(f))

【讨论】:

如果该脚本在创建 7 天后运行,它会自行删除吗? 是的,除非您明确指定不删除此文件。【参考方案3】:

另一个版本:

import os
import time
import sys

if len(sys.argv) != 2:
    print "usage", sys.argv[0], " <dir>"
    sys.exit(1)

workdir = sys.argv[1]

now = time.time()
old = now - 7 * 24 * 60 * 60

for f in os.listdir(workdir):
    path = os.path.join(workdir, f)
    if os.path.isfile(path):
        stat = os.stat(path)
        if stat.st_ctime < old:
            print "removing: ", path
            # os.remove(path) # uncomment when you will sure :)

【讨论】:

注意:st_ctime 不代表创建时间。 “这是 inode 的更改时间。每当修改 inode 时都会更新它,例如权限更改等元数据修改,硬链接的链接/取消链接等。”因此,您可能希望根据您处理的数据使用其他东西。例如,我使用st_mtime,这是最后一次修改的日期。

以上是关于删除超过 7 天的文件的主要内容,如果未能解决你的问题,请参考以下文章

Google云端硬盘,在特定文件夹中自动删除超过7天的文件

bash脚本通过每天保留1个备份来删除超过7天的备份[重复]

Exchange2003如何自动删除超过7天的邮件

如何删除时间戳超过 7 天的行

在 Git 中删除超过 90 天的文件版本

当“参数列表太长”时如何删除所有超过 3 天的文件?