Python 当我使用SSH连接到服务器时,如何获取所有.log和.txt文件

Python 当我使用SSH连接到服务器时,如何获取所有.log和.txt文件,python,paramiko,Python,Paramiko,我正在使用Paramiko模块登录到服务器(在某些服务器上使用ssh,在其他服务器上使用sftp)。我可以从服务器上的特定文件夹中获取文本和日志文件,没有问题。但是有许多子目录包含.txt和.log文件。我读了一些get方法不接受(*.txt)的地方。有人知道怎么解决这个问题吗。以下是我当前用于登录到服务器并获取特定日志的代码: import paramiko import sys import os ssh = paramiko.SSHClient() ssh.set_mi

我正在使用Paramiko模块登录到服务器(在某些服务器上使用ssh,在其他服务器上使用sftp)。我可以从服务器上的特定文件夹中获取文本和日志文件,没有问题。但是有许多子目录包含.txt和.log文件。我读了一些get方法不接受(*.txt)的地方。有人知道怎么解决这个问题吗。以下是我当前用于登录到服务器并获取特定日志的代码:

 import paramiko
 import sys
 import os





 ssh = paramiko.SSHClient()
 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 ssh.connect('10.5.48.74', username='root', password='******')

 ftp = ssh.open_sftp()
 ftp.get('/var/opt/crindbios/log/crindbios.log', '.')
 ftp.close()

使用以下脚本获取文件列表。然后用ftp.get遍历列表

import paramiko
import os

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('localhost',username='****')  

apath = '/var/log'
apattern = '"*.log"'
rawcommand = 'find {path} -name {pattern}'
command = rawcommand.format(path=apath, pattern=apattern)
stdin, stdout, stderr = ssh.exec_command(command)
filelist = stdout.read().splitlines()

ftp = ssh.open_sftp()
for afile in filelist:
    (head, filename) = os.path.split(afile)
    print(filename)
    ftp.get(afile, './'+filename)
ftp.close()
ssh.close()
这正是dustyprogrammer所建议的:在远程服务器上应用shell命令来获取文件列表。然后用python对列表进行后处理


要下载,您必须为每个文件创建一个新的文件路径-下载到您建议的目录不起作用(对我来说)

可以通过
sftp.listdir()
轻松访问文件名。因此,我是这样做的

import os
import paramiko
rserver = "raspberrypi"
ruser = "pi"
rpassword ="<your-password>"
rdirectory_charging_log = "/home/pi/logs/"
directory_charging_log = "/Users/<your-user>/logs/"
ssh = paramiko.SSHClient() 
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(rserver, username=ruser, password=rpassword)
sftp = ssh.open_sftp()
rfiles = sftp.listdir(rdirectory_charging_log)
rfile = ""
for rfile in rfiles: 
    sftp.get(rdirectory_charging_log+rfile, directory_charging_log+rfile)
sftp.close()
ssh.close()
导入操作系统
进口帕拉米科
rserver=“raspberrypi”
ruser=“pi”
rpassword=“”
rdirectory_charging_log=“/home/pi/logs/”
目录\u charging\u log=“/Users//logs/”
ssh=paramiko.SSHClient()
加载主机密钥(os.path.expanduser(os.path.join(“~”,“.ssh”,“已知主机”))
connect(rserver,用户名=ruser,密码=rpassword)
sftp=ssh.open_sftp()
rfiles=sftp.listdir(rdirectory\u charging\u log)
rfile=“”
对于rfiles中的rfile:
sftp.get(rdirectory\u charging\u log+rfile,directory\u charging\u log+rfile)
sftp.close()
ssh.close()

为什么不使用bash?查找/-name*.txt | xargs…@dustyprogrammer。。。是的,这很好,但我正在将此功能添加到Python gui应用程序中。我正在从Windows 7计算机上运行Python,并且在下载到根目录时也遇到问题。但是,我可以创建一个新文件夹。。。谢谢工作得很好,我得到的文件名是二进制的,不知道为什么。。。