我正在尝试使用python来复制文件/目录树.
是否可以使用copytree复制以foo结尾的所有内容?
有一个ignore_patterns模式函数,我可以给它一个否定的正则表达式吗?他们是否支持python?
例如.
copytree(src,dest,False,ignore_pattern('!*.foo'))在哪里!不是指以foo结尾的任何东西.谢谢.
shutil.copytree有一个ignore关键字.ignore可以设置为任何可调用的.给定正在访问的目录及其内容列表,callable应返回一系列要忽略的目录和文件名.
例如:
import shutil
def ignored_files(adir,filenames):
return [filename for filename in filenames if not filename.endswith('foo')]
shutil.copytree(source, destination, ignore=ignored_files)
Run Code Online (Sandbox Code Playgroud)
基于 unutbu 的答案。以下获取所有文件的列表,然后删除与“ignore_patterns”匹配的文件,然后将其作为要忽略的文件列表返回。也就是说,它会双重否定只复制您想要的文件。
import glob, os, shutil
def copyonly(dirpath, contents):
return set(contents) - set(
shutil.ignore_patterns('*.py', '*.el')(dirpath, contents),
)
shutil.copytree(
src='.',
dst='temp/',
ignore=copyonly,
)
print glob.glob('temp/*')
Run Code Online (Sandbox Code Playgroud)