Python 来自远程计算机正则表达式的Paramiko scp副本
有没有办法使用paramiko scp复制以“output”结尾的远程文件 我有下面的代码,只有当我提供完整路径或确切的文件名时才会复制 下面是代码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
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通配符满足您的过滤需求时,才会使用。