Сообщить об ошибке.

Функция copytree() модуля shutil в Python

Рекурсивно копировать все дерево каталогов

Синтаксис:

import shutil

shutil.copytree(src, dst, symlinks=False, ignore=None, 
                copy_function=copy2, ignore_dangling_symlinks=False, 
                dirs_exist_ok=False)

Параметры:

  • src - str, исходное место/путь копируемого файла ,
  • dst - str, место/путь назначения нового файла,
  • follow_symlinks=True - что делать с символическими ссылками.
  • ignore=None - функция пропуска файлов,
  • copy_function=copy2 - функция копирования файлов,
  • ignore_dangling_symlinks=False - отключает исключение при копировании битых символических ссылок,
  • dirs_exist_ok=False - вызывает исключение если dst существует.

Возвращаемое значение:

  • str каталог назначения dst.

Описание:

Функция copytree() модуля shutil рекурсивно копирует все дерево каталогов с корнем в src в каталог с именем dst и возвращает каталог назначения dst.

Аргумент dirs_exist_ok позволяет НЕ ВЫЗЫВАТЬ исключение, если dst или какой-либо родительский каталог уже существует.

Права и время доступа/изменения каталогов копируются с помощью функции shutil.copystat(), отдельные файлы копируются с помощью функции shutil.copy2().

Если символические ссылки имеют значение True, то символические ссылки в исходном дереве представлены как символические ссылки в новом дереве и метаданные исходных ссылок будут скопированы, насколько позволяет платформа. Если False или не задано, содержимое и метаданные связанных с ссылками файлов копируются в новое дерево.

Когда аргумент symlinks имеет значение False и если файл, на который указывает символическая ссылка не существует, то будет добавлено исключение в список ошибок Error, возникших в конце процесса копирования. Можно установить необязательный флаг ignore_dangling_symlinks в значение True, если хотите отключить это исключение. Обратите внимание, что этот параметр не влияет на платформы, которые не поддерживают функцию os.symlink().

Если задано ignore, это должен быть вызываемая функция, которая будет получать в качестве аргументов каталог dst и список его содержимого, возвращаемый os.listdir(). Поскольку shutil.copytree() вызывается рекурсивно, то игнорирование будет вызываться один раз для каждого вложенного копируемого каталога.

Вызываемый объект должен возвращать последовательность имен каталогов и файлов относительно текущего каталога, то есть подмножества элементов во втором аргументе. Эти имена будут игнорироваться в процессе копирования. Функция shutil.ignore_patterns() может использоваться для создания такого вызываемого объекта, который игнорирует имена на основе шаблонов в стиле glob.glob().

Если возникает исключение(я), то возникает ошибка с перечнем причин.

Если задана функция copy_function, это должен быть вызываемый объект, который будет использоваться для копирования каждого файла. Он будет вызываться с исходным путем scr и путем назначения dst в качестве аргументов. По умолчанию используется функция shutil.copy2(), но можно использовать любую функцию, поддерживающую такую ​​же сигнатуру, например shutil.copy().

Вызывает событие аудита shutil.copytree с аргументами src, dst.

Примеры использования:

Пример, который использует помощник shutil.ignore_patterns(). Копируется все, кроме файлов .pyc и файлов или каталогов, чье имя начинается с tmp.

from shutil import copytree, ignore_patterns

copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

Другой пример, который использует аргумент ignore для добавления вызова логирования:

from shutil import copytree
import logging

def _logpath(path, names):
    logging.info('Working in %s', path)
    return []   # nothing will be ignored

copytree(source, destination, ignore=_logpath)