def ignore_patterns(*patterns):
"""Function that can be used as copytree() ignore parameter.
Patterns is a sequence of glob-style patterns
that are used to exclude files"""
def _ignore_patterns(path, names):
ignored_names = []
for pattern in patterns:
ignored_names.extend(fnmatch.filter(names, pattern))
return set(ignored_names)
return _ignore_patterns
并使用相同的原理编写自己的函数。
例如,我们需要复制自某个时间以来已创建/修改的所有文件(包括子目录):
from shutil import copytree
from datetime import datetime as DT, timedelta
from pathlib import Path
def ignore_files(older_than):
def _ignore(path, names):
ignored_names = []
for name in names:
file_mtime = (Path(path) / name).stat().st_mtime
if DT.fromtimestamp(file_mtime) < older_than:
ignored_names.append(name)
return set(ignored_names)
return _ignore
DAYS = 7
older_than = DT.now() - timedelta(days=DAYS)
copytree(r'c:\incoming', r'c:\staging', ignore=ignore_files(older_than))
您可以“窥视” shutil.ignore_patterns()函数的实现方式:
并使用相同的原理编写自己的函数。
例如,我们需要复制自某个时间以来已创建/修改的所有文件(包括子目录):