我正在尝试创建一个复制所有目录和文件的函数,并将它们放在一个文件夹中。这个目录没有备份文件夹,所以我第一次使用复制树时,每次重新运行该程序时,它应该再次备份(包括普遍的备份)。我遇到了一个问题,即copytree陷入了一个巨大的递归循环,并且不知道我做错了什么。这是我的代码。它第一次起作用,但是当我第二次运行时它会混乱。 argv [1]是您要备份的本地文件夹。这将运行:
%python3文件名foldername
from os import path, walk, remove, mkdir, listdir
from sys import argv
from shutil import copytree
if path.exists(argv[1]+'/Versions'):
copytree(argv[1], argv[1]+ '/Versions/' + str((len(listdir(argv[1]+'/Versions')))+1))
else:
copytree(argv[1], argv[1]+'/Versions/1')
如果已存在Versions文件夹,则会计算子文件夹的数量并创建一个新文件夹,其标签为+1文件夹数
答案 0 :(得分:2)
在我看来,您正在备份的文件夹的子文件夹中创建备份。
因此,下次运行脚本时,您将备份备份,然后备份备份备份等等
将备份放入不是原始数据子文件夹的位置,您的脚本应该可以正常工作。
source_path = os.path.join(argv[1], '/Versions')
destination_path = os.path.join(argv[1], '..', '/Backup')
#Now handle copying between these two locations
...
或者,您可以将callable传递给copytree
以忽略某些目录。
from shutil import copytree, ignore_patterns
copytree(source_path, destination_path, ignore=ignore_patterns('Versions'))