2015-11-18 77 views
0

我试图在工作中创建一个脚本,它允许我们输入一堆目录路径,然后递归地将这些目录复制到一台新计算机上。这是为了我们与员工的计算机更新过程。我知道我可以使用shutil将源代码复制到目的地,但我想更进一步并收集所有源代码目录,然后使用相同的目录路径将它们复制到目标硬盘驱动器。Python:递归复制一批目录

例如: SRC = G:\用户\%specificuser%\文件 DST = C:\用户\%specificuser%\文件

我宁愿不用每次输入源和目的地时间。所以我想我首先需要知道这是否甚至可以在Python中使用。如果是这样,我从哪里开始?

+0

一切皆有可能在Python。 :) – Pynchia

+0

你关心文件所有权和访问控制列表吗?像这样的元数据不会被shutil复制。 – Galax

+0

目的地似乎与源所在的路径相同,除了它所属的磁盘之外,因此您可以根据源创建目标而不需要重新键入 – Pynchia

回答

1

如何:

shutil.copytree(src, dst) 

或实现自己的copytree,遍历目录,如果需要创建它们(避免的问题,“目标目录必须不存在。”在评论中指出),排序的1路同步:

import os, os.path, shutil 

src="G:\\TestCopy" 
dst="D:\\TestCopy" 

def copy_tree(srcpath, dstpath): 
    print(srcpath) 
    if not os.path.exists(dstpath): 
     os.makedirs(dstpath) 
    for candidate in os.listdir(srcpath): 
     srccan = os.path.join(srcpath, candidate) 
     dstcan = os.path.join(dstpath, candidate) 
     if os.path.isdir(srccan): 
      copy_tree(srccan, dstcan) 
     else: 
      shutil.copyfile(srccan, dstcan) 

copy_tree(src, dst) 

如果您想根据从路径份的特定用户构建用户的字符串,os.path.join擅长这样做:

specificuser = "fred" 
src = os.path.join("G:\\users", specificuser, "Documents") 
dst = os.path.join("D:\\users", specificuser, "Documents") 
print(src) 
print(dst) 

输出:

G:\users\fred\Documents 
D:\users\fred\Documents 
+0

您应该指出“目标目录必须不存在”。 ,所以经常从/到相同的路径重复这个过程可能需要更多的信息 – Pynchia

+0

是的,OP可能需要一些更微妙的东西,我会编辑我的答案。 – Galax

+0

upvoted,但嘿,你去了全长。我想象这个问题是在同一路径上重复复制时,即当目的地已经存在时。在这种情况下,我只是重命名现有的并继续使用'shutil.copytree' :) – Pynchia