Python 来自远程计算机正则表达式的Paramiko scp副本

Python 来自远程计算机正则表达式的Paramiko scp副本,python,python-2.7,paramiko,scp,Python,Python 2.7,Paramiko,Scp,有没有办法使用paramiko scp复制以“output”结尾的远程文件 我有下面的代码,只有当我提供完整路径或确切的文件名时才会复制 下面是代码 import paramiko import os from paramiko import SSHClient from scp import SCPClient def createSSHClient(self, server): client = paramiko.SSHClient() client.load_s

有没有办法使用paramiko scp复制以“output”结尾的远程文件

我有下面的代码,只有当我提供完整路径或确切的文件名时才会复制

下面是代码

 import paramiko
 import os
 from paramiko import SSHClient
 from scp import SCPClient


def createSSHClient(self, server):
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(server, self.port, self.user, self.password)
    return client

  def get_copy(self, hostname, dst):
    ssh = self.createSSHClient(hostname)
    scp = SCPClient(ssh.get_transport())
    scp.get(dst)
    scp.close()
我想做的是

     get_copy(1.1.1.1, "*output")

我正在获取未找到的文件错误

可能需要先使用ssh获取列表,然后逐个scp它们

下面是类似的内容,仅供参考

def get_copy(self, hostname, dst):
    ssh = createSSHClient(hostname)

    stdin, stdout, stderr = ssh.exec_command('ls /home/username/*output')
    result = stdout.read().split()

    scp = SCPClient(ssh.get_transport())
    for per_result in result:
        scp.get(per_result)
    scp.close()
    ssh.close()

在这方面,我发现还有两种方法很有用

1) 您也可以不使用SCPClient,只使用Paramiko本身。像-

def get_copy(self, hostname, dst):
    ssh = createSSHClient(hostname)
    sftp = ssh.open_sftp()
    serverfilelist = sftp.listdir(remote_path)
    for f in serverfilelist:
            if re.search("*output", f):
                sftp.get(os.path.join(remote_path, f), local_path)

    ssh.close()
2) 如果您想使用正则表达式(通配符)使用SCPClient到SCP文件,链接将
我认为这会很有帮助。

也许再多了解一点你想要实现的目标就好了。据我所知,paramiko可以运行
ls${dst}-p | grep-v/
来获取文件名,并使用
if name.endswith('output'):…
对其进行迭代,等等嗨,克里斯,对不起,我的问题让人困惑。我在帖子中进行了更正,以便其他人也能理解clearlySee。虽然这样做有效,但您也可以在服务器端过滤文件,这更有效。看见当然,只有当shell通配符满足您的过滤需求时,才会使用。