1

我正在尝试制作一个复制所有目录和文件并将它们放在文件夹中的函数。这个目录没有备份文件夹,所以我第一次用复制树做一个,每次重新运行这个程序,都要重新备份一次(包括之前的备份)。我遇到了 copytree 陷入巨大的递归循环的问题,并且不知道我在做什么错。这是我的代码。它第一次工作,但是当我第二次运行它时,它就搞砸了。argv[1] 是您要备份的本地文件夹。这将运行为:

% python3 文件名文件夹名

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 存在的文件夹数量

4

1 回答 1

2

在我看来,您正在备份文件夹的子文件夹中创建备份。

所以下次你运行你的脚本时,你正在做一个备份的备份,然后是一个备份的备份,等等

将您的备份放在一个不是原始数据子文件夹的位置,您的脚本应该可以工作。

source_path = os.path.join(argv[1], '/Versions')
destination_path = os.path.join(argv[1], '..', '/Backup') 

#Now handle copying between these two locations
...

使用忽略方法

或者,您可以将可调用传递copytree给忽略某些目录。

from shutil import copytree, ignore_patterns

copytree(source_path, destination_path, ignore=ignore_patterns('Versions'))
于 2014-06-06T23:33:30.853 回答