Python:仅将FTP目录及子目录中缺失的文件复制到本地目录及子目录
问题是:
我有一个本地目录'/local'和一个远程FTP目录'/remote',里面有很多子目录和文件。我想检查一下在'/remote'的子目录中是否有新文件。如果有的话,就把它们复制到'/local'。
我的疑问是:
我这样做的策略对吗?这样做是不是太复杂了?有没有更快、更简单的方法来实现这个?
声明一下:我还是个Python新手,正在学习,所以请多多包涵... =)
这是我尝试过的:
首先,我创建了一个包含/local及其子目录中所有文件的列表。
LocalFiles=[]
for path, subdirs, files in os.walk(localdir):
for name in files:
LocalFiles.append(name)
然后我用一些ftplib的技巧,使用ftpwalk(),把结果复制到一个特定格式的列表中:
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 个回答
1
如果你能获取本地和远程FTP目录的修改时间,并把这些信息存储到数据库里,那么你就可以更有效地查找新文件或修改过的文件。这样做可以大大加快同步的过程。