我正在尝试制作一个复制所有目录和文件并将它们放在文件夹中的功能。该目录没有备份文件夹,因此,当我第一次使用副本树创建目录时,每次您重新运行该程序时,都应再次备份(包括重要的备份)。我在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')


如果“版本”文件夹已存在,它将计算子文件夹的数量并创建一个标签为+1的新文件夹

最佳答案

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

因此,下次运行脚本时,将先备份一个备份,然后再备份一个备份,依此类推。

将备份放在原始数据的子文件夹之外的位置,脚本应该可以工作。

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

10-06 05:19