我如何使用copytree错误,如何修复它,以免它被一个巨大的循环陷入?

时间:2014-06-06 23:29:26

标签: python recursion copytree

我正在尝试创建一个复制所有目录和文件的函数,并将它们放在一个文件夹中。这个目录没有备份文件夹,所以我第一次使用复制树时,每次重新运行该程序时,它应该再次备份(包括普遍的备份)。我遇到了一个问题,即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文件夹数

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'))