Python shutil copytree: use ignore function to keep specific files types
shutil
already contains a function ignore_patterns
, so you don't have to provide your own. Straight from the documentation:
from shutil import copytree, ignore_patternscopytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
This will copy everything except
.pyc
files and files ordirectories whose name starts withtmp.
It's a bit tricky (and not strictly necessary) to explain what's going on: ignore_patterns
returns a function _ignore_patterns
as its return value, this function gets stuffed into copytree
as a parameter, and copytree
calls this function as needed, so you don't have to know or care how to call this function _ignore_patterns
. It just means that you can exclude certain unneeded cruft files (like *.pyc
) from being copied. The fact that the name of the function _ignore_patterns
starts with an underscore is a hint that this function is an implementation detail you may ignore.
copytree
expects that the folder destination
doesn't exist yet. It is not a problem that this folder and its subfolders come into existence once copytree
starts to work, copytree
knows how to handle that.
Now include_patterns
is written to do the opposite: ignore everything that's not explicitly included. But it works the same way: you just call it, it returns a function under the hood, and coptytree
knows what to do with that function:
copytree(source, destination, ignore=include_patterns('*.dwg', '*.dxf'))