清除脚本-根据日期保存和删除文件

时间:2018-06-20 13:07:45

标签: python

我正在使用Python编写清除脚本。以下脚本运行正常。该脚本浏览目录列表,并根据每个文件日期删除或保留任何文件。因此,如果X天或几分钟后存在任何文件,这些文件将被删除。

purge_files_path = ['x:/path/destination', 'x:/path/destination', ]

kwargs = {"weeks":0, "days": 0, "hours": 0, "minutes": 23}

def purge(purge_files_path, kwargs):

    import os
    from datetime import datetime, timedelta

    for folder in purge_files_path:
        for(dir, _, files) in os.walk(folder):
            for file in files:
                path = os.path.join(dir, file)

                if os.path.exists(path):
                    file_date = datetime.fromtimestamp(os.path.getmtime(path))
                    delta = datetime.now() - file_date

                    if delta >= timedelta(**kwargs):
                        os.remove(path)

现在,我只想添加一个新功能。我想要在删除文件之前将其保存在另一个文件夹中。可能很容易,但是我想保留所有文件的文件夹体系结构。

因此,如果必须清除并位于以下位置的文件:

c:/source/folder1/folder2/file.txt

它必须备份到:

c:/backup/folder1/folder2/file.txt

我可以使用shutil.copytree,但是存在现有文件夹错误。

1 个答案:

答案 0 :(得分:1)

是的,只需使用os.rename而不是os.remove。您可能要使用relpath来保留目录结构。只需将您对os.remove(path)的呼叫替换为以下代码段即可。

relative_path = os.path.relpath(path, folder))
backup_path = os.path.join(backup_dir, relative_path)
os.makedirs(os.path.dirname(backup_path), exist_ok=True)
os.rename(path, backup_path)

注意:如果目录位于不同的卷上,则需要使用shutil.move而不是os.rename

要获得python 2支持,您需要像这样删除exists_ok=True

if not os.path.isdir(os.path.dirname(backup_path)):
    os.makedirs(os.path.dirname(backup_path))