Python - 如何仅复制新修改的文​​件

时间:2015-02-24 13:52:08

标签: python

我正在尝试编写一个将某些文件从源文件夹复制到目标文件的python脚本,但是只应复制新创建的文件。 例如,源文件夹包含2005文件,目标文件夹包含2000个文件,我的脚本应该复制5个丢失的文件

在下面的脚本中,逻辑是记录扩展名为“.extension”的文件的修改时间,然后尝试获取并在下一步中进行比较

import sys, os, shutil
import glob
import os.path, time

fob     = open(r"C:\Python\Log.txt","a")
dir_src = r"C:\Python\Source"
dir_dst = r"C:\Python\Dest"

for w in os.listdir(dir_src):
    if w.endswith('.extenstion'):
        pathname = os.path.join(dir_src, w)
        if not Date_File in (fob):
            shutil.copy2(pathname, dir_dst)
            fob.write("File Name:   %s" % os.path.basename(pathname))
            fob.write("   Last modified Date:   %s" % time.ctime(os.path.getmtime(pathname)))
            fob.write("   Copied On:   %s" % time.strftime("%c"))
            fob.write("\n")                
fob.close()
os.system("PAUSE")

我找不到比较日期的方法,并检查是否应该复制文件。

欢迎任何其他方法。

3 个答案:

答案 0 :(得分:1)

您应该能够通过执行list(set(os.listdir(dir_src)) - set(os.listdir(dir_dst)))从源文件夹中删除目标文件夹的现有文件,并遍历此列表。

答案 1 :(得分:1)

虽然您的比较文件可行,但我认为在这种情况下,更好的方法是比较两个文件的getmtime值。由于文件在源目录和目标目录中具有相同的名称,因此您可以在目标目录中对同一文件名执行getmtime查找。

如果文件不存在,您应该获得os.error,这意味着您无论如何都必须复制该文件。

如果目标目录中的文件被修改的时间早于源目录中的文件(所以getmtime(src_file) > getmtime(dest_file)),那么您也知道要将其复制。

如果你愿意,你当然可以记录它。您也可以放弃整个过程并使用rsync或其他东西。

答案 2 :(得分:0)

除了这个逻辑,你可以做的是, 您可以在源路径和目标路径中找到文件的纪元时间(使用os.path.getmtime()方法),然后进行比较。如果源路径中的文件具有上次修改时间的更大纪元值,则可以将其复制到目标路径中。