我是使用shutil copytree
复制文件夹和主文件夹内的所有子文件夹import shutil
import sys
import os
import re
SOURCE_FOLDER = sys.argv[1]
DESTINATION_FOLDER = sys.argv[2]
def copyDirectory(SOURCE_FOLDER, DESTINATION_FOLDER):
try:
print SOURCE_FOLDER
print DESTINATION_FOLDER
shutil.copytree(SOURCE_FOLDER, DESTINATION_FOLDER)
# Directories are the same
#except:
# print "Not copied"
except shutil.Error as e:
print('Directory not copied. Error: %s' % e)
# Any error saying that the directory doesn't exist
except OSError as e:
print('Directory not copied. Error: %s' % e)
copyDirectory(SOURCE_FOLDER,DESTINATION_FOLDER)
问题是如果目录存在则抛出错误
Directory not copied. Error: [Errno 17] File exists: 'destination'
我想要的是,如果目录已经存在,它想要检查所有子目录,如果子目录也存在,它应该检查其中的所有文件,它应该跳过现有文件并复制该子目录中的新文件,如果sub direscotry不存在,那么它应该复制该子目录
注意:子目录可能是嵌套的(子目录的子目录)。
但是上面的脚本无法正常工作我应该添加到该脚本中吗?
答案 0 :(得分:1)
shutil.copytree
来跳过现有的目标文件和目录。来自文档
目标目录必须不存在。
您需要编写自己的解决方案。现有的copytree
代码是一个良好的开端。
答案 1 :(得分:0)
为了检查目录是否已存在,您可以使用:os.path.exists(directory)
if not os.path.exists(DESTINATION_FOLDER):
shutil.copytree(SOURCE_FOLDER, DESTINATION_FOLDER)
如果dest目录已经存在,您可以在src-dir的子目录上运行您的函数。 您可以使用以下函数获取所有src-dir子目录的列表,该函数将目录名称作为输入,并返回子目录列表
def SubDirPath (d):
return filter(os.path.isdir, [os.path.join(d,f) for f in os.listdir(d)])
使用这个目录列表,您可以在目录的每个实例上再次执行您的功能。
对于src和dst中存在的每个目录 - 如果文件也存在于dst-dir中,则需要检查src-dir中的每个文件。
最诚挚的问候,
亚龙