我正在使用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,但是存在现有文件夹错误。
答案 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))