Python脚本将文件从一个服务器获取到另一个服务器并将它们存储在不同的目录中

时间:2012-10-11 03:43:44

标签: python ssh scp

我正在研究server 1。我需要编写一个Python脚本,我需要连接到server 2并从目录中获取某些文件(名称以字母“HM”开头的文件)并将它们放入另一个需要创建的目录中在运行时(因为对于程序的每次运行,必须在server 1上创建一个新目录并且必须将文件转储到那里)。我需要在python中这样做,我对这种语言比较新。我不知道从哪里开始代码。有没有涉及'tarring'文件的解决方案?我查看了paramiko,但根据我的知识,一次只传输一个文件。我甚至看过glob但我无法弄清楚如何使用它。有人可以帮我解决问题吗?

4 个答案:

答案 0 :(得分:1)

Python不是我执行此任务的首选,但您可以使用对系统的调用并运行mkdir和rsync。特别是你可以做到

import os
os.system("mkdir DIRECTORY")
os.system("rsync -cav user@server2:/path/to/files/HM* DIRECTORY/")

答案 1 :(得分:1)

传输您可能想要查看的文件paramiko

import os
import paramiko

localpath = '~/pathNameForToday/'
os.system('mkdir ' + localpath)
ssh = paramiko.SSHClient() 
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(server, username=username, password=password)
sftp = ssh.open_sftp()
sftp.get(remotepath, localpath)
sftp.close()
ssh.close() 

我想使用glob你可以这样做:

import os
import re
import glob

filesiwant = re.compile('^HM.+') #if your files follow a more specific pattern and you don't know regular expressions you can give me a sample name and i'll give you the regex4it
path = '/server2/filedir/'
for infile in glob.glob( os.path.join(path, '*') ):
    if filesiwant.match(infile):
         print "current file is: " + infile

否则更容易的选择是使用os.listdir()

import os
for infile in os.listdir('/server2/filedir/'):
    ...`

这会回答你的问题吗?如果没有发表评论

答案 2 :(得分:0)

您可以使用fabric。在server1上创建fabfile.py

import os
from fabric.api import get, hosts

@hosts('server2')
def download(localdir):
    os.makedirs(localdir)  # create dir or raise an error if it already exists 
    return get('/remote/dir/HM*', localdir)  # download HM files to localdir

从shell中的同一目录运行:fab download:/to/dir fabfile.pyfabMakefilemake。)

答案 3 :(得分:0)

只需使用ssh和tar。无需涉及Python

$ ssh server2 tar cf - HM* | tar xf -

远程tar可以直接进入本地tar