2011-07-14 5 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を使用しないのですか? find/-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提案するものである:リモートサーバー上では、ファイルリストを取得するためのシェルコマンドを適用します。その後、あなたはpythonでリストを後処理します。

ダウンロードするには、ファイルごとに新しいファイルパスを作成する必要があります。提案したとおりにディレクトリにダウンロードしてください(私にとって)。

+0

私はWindows 7マシンからPythonを実行していますが、ルートにダウンロードする際に問題があります。しかし、私は新しいフォルダを作成することができます...ありがとう! – suffa

関連する問題