在 pysftp get 中指定文件模式

Specify file pattern in pysftp get

我们可以这样写一个简单的get

import pysftp

hostname = "somehost"
user = "bob"       
password = "123456"  
filename = 'somefile.txt'

with pysftp.Connection(hostname, username=user, private_key='/home/private_key_file') as sftp:
    sftp.get(filename)

但是,我想在文件名中指定一个模式,例如:'*.txt'

知道如何使用 pysftp 做到这一点吗?

pysftp 中没有下载匹配文件掩码的文件的功能。

你必须:


  • 有关简单的实现,请参阅:

    是关于Paramiko的,但是文件匹配部分和pysftp是一样的:

    import fnmatch
    
    for filename in sftp.listdir('/remote/path'):
        if fnmatch.fnmatch(filename, "*.txt"):
            sftp.get("/remote/path/" + filename, "/local/path/" + filename)
    

    尽管无论如何你真的应该使用 Paramiko:

  • 递归例子(必须加上文件匹配),见:
    .

  • 另见 Connection.get_d or Connection.get_r 是如何实现的。

查看文档后可以确认您不能使用模式列出。所以我做了这样的事情:

import pysftp
import re

server = pysftp.Connection(host=FTP_HOST,
                  username=FTP_USERNAME,
                  password=FTP_PASSWORD)
server.cwd(YOUR_FILES_PATH)
filelist = server.listdir()

for filename in filelist:
    filedate = re.search(".*\.txt$", filename)
    if filedate:
        print "FOUND FILE " + filename
import pysftp
import sys

[...]

dn = datetime.now().strftime("%Y%m%d%H");
with pysftp.Connection(myHost, myUsername, password=myPassword) as sftp:
    myFileList = sftp.listdir("files/")
    for filename in myFileList:
        if (filename.rfind("ArrivalList_" + dn) != -1):
            sftp.get("files/" + filename, "/tmp/" + filename)