我有一个本地目录'/ 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 复制它们。 这是一个合理的策略吗?任何提示,评论和建议都值得赞赏[特别是对于大量文件]。
答案 0 :(得分:1)
如果获得本地和远程FTP目录的修改时间并将其存储在数据库中,则可以删除对新文件或已修改文件的搜索。这应该会显着加快同步过程。