2015-03-11 3 views
1

Я пытаюсь реализовать DIR-COPY. мой вход, как это ..Исключить некоторые подпапки при копировании (im using copytree) в python

source = D/Test/Source 
    Target = D/Test/Target 
    Ignore_Pattern = '*.exe' 
    Exclude_Sub_Folder = D/Test/Source/Backup,D/Test/Source/Backup2 

Я могу игнорировать .exe файлы, используя игнорировать свойство в copytree Did как этот

shutil.copytree(source , Target ,ignore=shutil.ignore_patterns(Ignore_Pattern)) 

Я не знаю, как исключить некоторые вложенных папок в исходном каталоге.

Пожалуйста, помогите .....

Благодаря

+0

может быть проще извлечь то, что вы хотите, а затем сделать копию –

ответ

3

Вы можете игнорировать все папки, которые имеют имя резервного копирования или Backup2:

shutil.copytree(source , Target ,ignore=shutil.ignore_patterns(Ignore_Pattern, "Backup", "Backup2")) 

«Но у меня есть несколько папок с именем «Резервное копирование», и я специально хочу игнорировать только тот, который находится в каталоге Test/Source », - говорите вы. В этом случае вам необходимо предоставить пользовательскую функцию игнорирования, которая исследует полный путь.

to_exclude = ["D:/Test/Source/Backup", "D:/Test/Source/Backup2"] 

#ignores excluded directories and .exe files 
def get_ignored(path, filenames): 
    ret = [] 
    for filename in filenames: 
     if os.path.join(path, filename) in to_exclude: 
      ret.append(filename) 
     elif filename.endswith(".exe"): 
      ret.append(filename) 
    return ret 

shutil.copytree(source , Target ,ignore=get_ignored) 

(Заботьтесь в to_exclude использовать правильный разделитель пути для конкретной операционной системы. Вы не хотите «Test \ Source \ Backup» получение включены, потому что вы использовали неправильный вид косой черты.)

Смежные вопросы