2017-11-23 11 views
0

Sysp 서버에서 디렉토리 구조의 로컬 복사본을 얻으려면 Pysftp 라이브러리의 get_r 기능 (https://pysftp.readthedocs.io/en/release_0.2.9/pysftp.html#pysftp.Connection.get_r)을 사용하고 있습니다.Pysftp - 원격 디렉토리에서 변경된 파일 만 가져옵니다.

원격 디렉토리의 내용이 변경되어 스크립트를 마지막으로 실행 한 이후에 변경된 파일 만 가져오고 싶을 때 올바른 접근 방법입니까?

+1

아니요, 'get_r'은 변경된 파일 만 다운로드 할 수 없습니다. 당신은 스스로 구현해야합니다. –

+0

그리고 ftp 디렉토리 트리를 가로 지르면 get 함수를 사용하여 개별 파일의 로컬 복사본을 얻어야합니까? 이 함수는 이미 존재하지만 현재의 ftp 내용과 동기화되지 않으면 파일을 가져올 수 있습니까? https://pysftp.readthedocs.io/ko/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)