How to skip existing files in sub folders and copy only new files
我是使用shutil copytree复制文件夹和主文件夹中的所有子文件夹
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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) |
问题是,如果目录存在,则会引发错误
1 | Directory not copied. Error: [Errno 17] File exists: 'destination' |
我想要的是,如果目录已经存在,它要检查所有的子目录,如果子目录也存在,它应该检查其中的所有文件,它应该跳过现有的文件并复制该子目录中的新文件,如果子目录不存在,那么它应该复制该子目录。
注意:子目录可以嵌套(子目录的子目录)。
但是上面的脚本不起作用,我应该在脚本中添加什么?
The destination directory must not already exist.
您需要编写自己的解决方案。现有的
为了检查目录是否已经存在,可以使用:os.path.exists(目录)
1 2 | if not os.path.exists(DESTINATION_FOLDER): shutil.copytree(SOURCE_FOLDER, DESTINATION_FOLDER) |
如果dest目录已经存在,可以在src目录的子目录上运行函数。您可以使用以下函数获取所有SRC DIR子目录的列表,该函数将目录名作为输入,并返回子目录的列表
1 2 | def SubDirPath (d): return filter(os.path.isdir, [os.path.join(d,f) for f in os.listdir(d)]) |
使用这个目录列表,您可以在目录的每个实例上再次执行您的函数。
对于同时存在于:src和dst中的每个目录,如果文件也存在于dst目录中,则需要检查src目录中的每个文件。
最好的问候,
亚龙