1

我正在尝试每 7 天通过 python 将整个目录从一个位置复制到另一个位置,以基本上进行备份...

备份文件夹/树文件夹可能存在也可能不存在,因此如果它不存在则需要创建该文件夹,这就是我认为distutils更适合的原因shutil

注意使用批处理或其他语言来完成上述工作对我来说更好吗?

以下代码:

import distutils
distutils.dir_util.copy_tree("C:\Users\A\Desktop\Test", "C:\Users\A\Desktop\test_new", preserve_mode=1, preserve_times=1, preserve_symlinks=0, update=1, verbose=0, dry_run=0)

回报:

Traceback (most recent call last):
  File "C:\Users\A\Desktop\test.py", line 2, in <module>
    distutils.dir_util.copy_tree("C:\Users\A\Desktop\test", "C:\Users\A\Desktop\test2", preserve_mode=1, preserve_times=1, preserve_symlinks=0, update=1, verbose=0, dry_run=0)
AttributeError: 'module' object has no attribute 'dir_util'

我究竟做错了什么?

提前致谢 - Hyflex

4

3 回答 3

8

您需要dir_util专门导入才能访问它的功能:

from distutils import dir_util

如果您需要该包中的其他模块,请将它们添加到该行,以逗号分隔。只导入您需要的模块。

于 2013-10-01T01:06:10.357 回答
3

对于 Unix/Linux,我建议使用 ' rsync '。对于 Windows:xcopy

于 2013-09-30T14:54:49.660 回答
0

我一直在尝试基本相同的事情来备份我在大量虚拟机上编写的内容。

我遇到了与 distutils 相同的问题。据我所知,Python 社区正在使用 distutils 模块开始标准化新模块与 Python 的接口方式。我认为他们仍然处于困境之中,因为我所看到的与它相关的一切似乎更复杂,而不是更复杂。希望我只是看到发生在重大变化中的所有疯狂。

但我确实想出了如何让它工作。要使用 distutil.dir_util.copytree(),

>>> from distutils import dir_util
>>> dir_util.copy_tree("/home/user/backing_up/temp", "/home/user/backing_up/other")
['/home/user/backing_up/other/stuff.txt']     # Return value indicating success

如果您觉得值得,您可以导入 distutils.core 并长时间调用 distutils.dir_util.copy_tree()。

>>> import distutils.core
>>> distutils.dir_util.copy_tree("/home/user/backing_up/temp", "/home/user/backing_up/other")
['/home/user/backing_up/other/stuff.txt']     # Return value indicating success

(我知道,我知道,“import module.submodule”和“from module import submodule”之间存在细微差别,但这不是问题的意图,只要您导入正确的内容并适当地调用函数,这没有什么区别。)

和你一样,我也明确表示我想要preserve_mode 和preserve_times 的默认值,但我没有触及其他变量。一旦我导入并按照我想要的方式调用该函数,一切都按预期工作。

现在我的备份脚本可以工作了,我意识到我应该用 Bash 编写它,因为我计划在机器进入特定运行级别时让它运行。我现在正在使用包装器,即使我应该重新编写它。

于 2013-11-15T21:22:13.957 回答