2011-07-14 27 views
3

我使用Paramiko模塊登錄服務器(在某些服務器上使用ssh,在其他服務器上使用sftp)。我可以從服務器上的特定文件夾中獲取文本和日誌文件沒有問題。但是有很多子目錄有.txt和.log文件。我讀了一些get方法不會接受的地方(* .txt)。有沒有人知道解決這個問題的方法。下面是我目前用來登錄到服務器並獲取特定日誌的代碼:當我將SSH連入服務器時,如何獲得所有.log和.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() 
+0

爲什麼不使用bash?找到/ -name * .txt | xargs ... – myusuf3

+0

@dustyprogrammer ...是的,這將是漂亮的,但我將這個功能添加到Python GUI應用程序。 – suffa

回答

7

使用以下腳本獲取文件列表。然後在列表中與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後處理列表。

要下載,您必須爲每個文件創建一個新的文件路徑 - 根據您的建議下載到目錄不起作用(對我而言)。

+0

我正在從Windows 7機器運行Python,並且遇到了下載到根目錄的問題。不過,我可以創建一個新文件夾......謝謝! – suffa

相關問題