在pysftp get中指定文件模式

时间:2016-03-31 09:52:13

标签: python sftp pysftp

我们可以这样写一个简单的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进行此操作的想法吗?

3 个答案:

答案 0 :(得分:4)

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

你必须:

  • 使用listdirwalktree列出目录(如果需要递归)
  • 迭代文件列表,过滤您想要的文件
  • 分别为每个人致电get

有关灵感,请参阅如何实施get_dget_r(递归)。

有关简单的实施,请参阅List files on SFTP server matching wildcard in Python using Paramiko。有关递归示例,请参阅Python pysftp get_r from Linux works fine on Linux but not on Windows

答案 1 :(得分:2)

在浏览完您无法使用模式列出的文档后可以确认。所以我做了这样的事情:

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

答案 2 :(得分:1)

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)