使用Paramiko列出在Python中匹配通配符的SFTP服务器上的文件

时间:2018-03-20 10:34:01

标签: python ssh sftp glob paramiko

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('hostname', username='test1234', password='test')
path = ['/home/test/*.txt', '/home/test1/*.file', '/home/check/*.xml']
for i in path:

    for j in glob.glob(i):

        print j

client.close()

我正在尝试使用glob.glob列出远程服务器上的通配符文件。但glob.glob()无效。

使用Python 2.6。

远程服务器包含以下文件:/home/test1/check.file/home/test1/validate.file/home/test1/vali.file

任何人都可以帮助解决这个问题。

2 个答案:

答案 0 :(得分:3)

glob不会神奇地开始使用远程服务器,只是因为您之前已经实例化了SSHClient

您必须使用Paramiko API列出文件,例如SFTPClient.listdir

import fnmatch

sftp = client.open_sftp()

for filename in sftp.listdir('/home/test'):
    if fnmatch.fnmatch(filename, "*.txt"):
        print filename

旁注:请勿使用AutoAddPolicy。您  这样做会失去安全感。请参阅Paramiko "Unknown Server"

答案 1 :(得分:2)

或者使用pysftp(是 paramiko 包装器)并编写如下内容:

import pysftp


def store_files_name(fname):
    pass


def store_dir_name(dir_name):
    pass


def store_other_file_type(other_file):
    pass

with pysftp.Connection('server', username='user', password='pass') as sftp:
    sftp.walktree('.', store_files_name, store_dir_name, store_other_file_type)