来自远程计算机正则表达式的Paramiko scp复制

时间:2018-10-15 04:23:40

标签: python python-2.7 paramiko scp

我可以使用paramiko scp复制以“输出”结尾的远程文件。

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

下面是代码

 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")

我找不到文件错误

2 个答案:

答案 0 :(得分:2)

也许需要先使用ssh来获取列表,然后再将其一一删除。

如下所示,仅供参考。

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 :(得分:1)

在这种情况下,我发现还有另外两种方法有用。

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文件,则THIS链接将    我认为会有所帮助。