python:仅将缺少的文件从FTP目录和子目录复制到本地目录和子目录

时间:2011-07-27 19:55:08

标签: python list compare directory ftplib

问题是:

我有一个本地目录'/ local'和一个远程FTP目录'/ remote',其中包含子目录和文件。我想检查'/ remote'的子目录中是否有新文件。如果有,请将它们复制到'/ local'

问题是:

我正在使用正确的策略吗?这是完全矫枉过正的,有更快的pythonic方式吗? 免责声明:我是一个试图学习的python n00b。所以要温柔...... =) 这就是我尝试过的:

创建/ local及其子目录中所有文件的列表。

LocalFiles=[]
for path, subdirs, files in os.walk(localdir): 
    for name in files:                     
        LocalFiles.append(name)

使用ftpwalk()做一些ftplib魔术并将其结果复制到表单列表中:

 RemoteFiles=[['/remote/dir1/','/remote/dir1/','/remote/dir3/'],['file1.txt','file12.py','file3.zip']]

所以我有与每个文件对应的目录。 然后通过比较文件名列表

来查看哪些文件丢失了
missing_files= list(set(RemoteFiles[1]) - set(LocalFiles))  

一旦我找到他们的名字,我就会尝试找到该名称附带的目录,

for i in range(0,len(missing_files)):
    theindex=RemoteFiles[1].index(missing_files[i])

允许我构建缺失文件及其目录的列表,

MissingDirNFiles.append([remotefiles[0][theindex],remotefiles[1][theindex]])

所以我可以用 ftp.retrbinary 复制它们。 这是一个合理的策略吗?任何提示,评论和建议都值得赞赏[特别是对于大量文件]。

1 个答案:

答案 0 :(得分:1)

如果获得本地和远程FTP目录的修改时间并将其存储在数据库中,则可以删除对新文件或已修改文件的搜索。这应该会显着加快同步过程。