2011-07-27 5 views
0

問題は次のとおりです。のpython:地元のdirsとサブのdirsへのFTPのdirsとサブのdirsからコピーだけ不足しているファイル

私はローカルディレクトリを持っている「/ローカル」およびリモートのFTPディレクトリ'/ remote'サブディレクトリとファイルがいっぱいです。 '/ remote'のサブディレクトリに新しいファイルがあるかどうか確認したいのですが。存在する場合は、'/ local'にコピーしてください。

質問は次のとおりです。私は正しい戦略を

使用していますか?これは完全に過剰なのですか?それを行うには非常に高速なpyononic方法はありますか? 免責事項:私は学ぶことを試みている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

ローカルFTPディレクトリとリモートFTPディレクトリの両方の変更時刻を取得してデータベースに格納すると、新しいファイルまたは変更されたファイルの検索をプルーニングできます。これにより、同期処理が大幅に高速化されます。

+0

ご提案いただきありがとうございます。私は、/ localと/ remoteのサブフォルダが異なっていることを忘れていました。/remoteにある新しいファイルは、/ localの "pigeonholes"にいくつかの基準(いくつかの正規表現は名前に関連していますが、dirではなく)に応じて送信する必要があります。 – Massagran

+0

しかし、わかりましたが、/ remoteのサブディレクトリの変更時に変更を探すことで、/ remote内の新しいファイルや変更されたファイルのローカライズを高速化できます。 –