我可以使用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")
我找不到文件错误
答案 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链接将 我认为会有所帮助。