2017-11-23 7 views
0

私はPysftpライブラリのget_r機能(https://pysftp.readthedocs.io/en/release_0.2.9/pysftp.html#pysftp.Connection.get_r)を使用して、sftpサーバからディレクトリ構造のローカルコピーを取得しています。Pysftp - リモートディレクトリから変更されたファイルのみを取得する

リモートディレクトリの内容が変更され、スクリプトが最後に実行されてから変更されたファイルのみを取得したい場合は、正しいアプローチですか?

+1

いいえ、 'get_r'は変更されたファイルのみをダウンロードできません。あなたはそれを自分で実装する必要があります。 –

+0

そして、ftpディレクトリツリーを走査すると、get関数を使って個々のファイルのローカルコピーを取得する必要がありますか?この関数はファイルがすでに存在していても現在のFTPコンテンツと同期していない場合はそのファイルを取得しますか? https://pysftp.readthedocs.io/en/release_0.2.9/pysftp.html#pysftp.Connection.get –

+1

'get'は無条件にファイルをダウンロードします。それはどんな "同期"も気にしない。 –

答えて

0

pysftp.Connection.listdir_attrを使用して、ファイルタイムスタンプを含むファイルのリストを取得します。

次に、リストを繰り返し、ローカルファイルと比較します。

import os 
import pysftp 
import stat 

with pysftp.Connection('example.com', username='username', password='password') as sftp: 
    sftp.cwd("/remote/path") 
    for f in sftp.listdir_attr(): 
     if not stat.S_ISDIR(f.st_mode): 
      print("Checking %s..." % f.filename) 
      if ((not os.path.isfile(f.filename)) or 
       (f.st_mtime > os.path.getmtime(f.filename))): 
       print("Downloading %s..." % f.filename) 
       sftp.get(f.filename, f.filename) 
関連する問題