2013-10-15 1 views
0

У меня есть основная папка netbooks_nbo, которая содержит более датированные папки. Я хочу получить последние семь папок (по последней измененной дате) и скопировать их где-нибудь на диск C: \. Вот мой текущий код:Python: копировать каталоги, а не файлы, из нескольких мест, переписывать, если одно и то же имя

код выглядит следующим образом:

import os 
import distutils.core 

def get_immediate_subdirectories(dir): 
    return [os.path.join(dir, name) for name in os.listdir(dir) 
      if os.path.isdir(os.path.join(dir, name))] 

def main(): 
    path = "\\\\Network_Drive\\netbooks_nbo" 
    all_dirs = get_immediate_subdirectories(path) 
    all_dirs.sort(key=lambda x: os.path.getmtime(x)) 
    all_dirs = all_dirs[len(all_dirs)-7: len(all_dirs)] 

    for i in all_dirs: 
     for n in get_immediate_subdirectories(i): 
      distutils.dir_util.copy_tree(n, "C:\\AllFiles") 
      print "copied"+ n 

Проблема заключается в том, что dir_util.copy_tree копирует все файлы, а не реальных каталогов. Я хочу сохранить структуру каталогов. Я попытался использовать shutil.copytree(src, dst), но он просто возвращает ошибку, потому что C: \ AllFiles уже существует после одной итерации цикла for. И shutil.copy(src,dst) не работает из-за некоторой причудливой ошибки разрешения.

Любые идеи?

ответ

0

Если деревья каталогов не слишком велики, вы можете упаковать каждое дерево каталогов в archive file, а затем распаковать каждый из архивных файлов в пункт назначения.

+0

Ha! Я думал об этом самом решении, но, похоже, это kludgey. – Parseltongue

+0

Я считаю это полезным при работе с различными наборами утилит командной строки (некоторые из них не имеют рекурсивной копии, некоторые с местом назначения на другой машине). Я не считаю, что стоит беспокоиться о небольшом временном архиве, но для больших наборов я часто использую канал между битами archive/unarchive, поэтому он действительно является просто копией. Я думаю, что вы действительно хотите rsync, но сначала я нашел архиваторы в стандартной библиотеке. –

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