Is there a way I can filter a directory by using the absolute path to it?
ignore = shutil.ignore_patterns("/Full/Path/To/aDir/Common"))
ignore = shutil.ignore_patterns("Common"))
You can make your own ignore function:
shutil.copytree('/Full/Path', 'target', ignore=lambda directory, contents: ['Common'] if directory == '/Full/Path/To/aDir' else )
Or, if you want to be able to call
copytree with a relative path:
import os.path def ignorePath(path): def ignoref(directory, contents): return (f for f in contents if os.abspath(os.path.join(directory, f)) == path) return ignoref shutil.copytree('Path', 'target', ignore=ignorePath('/Full/Path/To/aDir/Common'))
From the docs:
If ignore is given, it must be a callable that will receive as its arguments the directory being visited by copytree(), and a list of its contents, as returned by os.listdir(). Since copytree() is called recursively, the ignore callable will be called once for each directory that is copied. The callable must return a sequence of directory and file names relative to the current directory (i.e. a subset of the items in its second argument); these names will then be ignored in the copy process. ignore_patterns() can be used to create such a callable that ignores names based on glob-style patterns.