仅当源比Python中的目标更新时,如何复制文件?

ved*_*ang 10 python

我正在编写一个脚本来将编译后的文件从一个位置复制到另一个位置.

我现在所拥有的是这样的:

import os
import shutil

shutil.copy2 (src, dst)
#... many more shutil.copy commands
#src is a filename string
#dst is the directory where the file is to be copied
Run Code Online (Sandbox Code Playgroud)

我的问题是,许多被复制的文件都是大文件,并不是所有文件都在每个编译周期中重新编译.理想情况下,我只想复制此脚本中已更改的文件.有什么方法可以做到这一点吗?

And*_*Dog 13

你可以利用文件修改时间,如果这对你来说足够了:

# If more than 1 second difference
if os.stat(src).st_mtime - os.stat(dest).st_mtime > 1:
    shutil.copy2 (src, dst)
Run Code Online (Sandbox Code Playgroud)

或者像rsync一样调用同步工具.

  • 为什么`> 1` - 不应该是`> 0`? (3认同)

小智 11

您可以使用distutils.file_util.copy_file通过设置可选参数来执行智能复制:update=1.

还有一个版本可以复制整个目录distutils.dir_util.copy_tree.

然后,您可以通过启用日志记录来验证其中任何一个是否真正有效并且只复制所需的文件:

import distutils.log
import distutils.dir_util

distutils.log.set_verbosity(distutils.log.DEBUG)
distutils.dir_util.copy_tree(
    src_dir,
    dst_dir,
    update=1,
    verbose=1,
)
Run Code Online (Sandbox Code Playgroud)

打印哪些文件被复制.