首页 > 代码库 > paramiko实现上传目录

paramiko实现上传目录

使用paramiko上传目录,重点是上传的那个过程,想了一上午才想出来,可能有点奇葩,但是还是实现了这个功能

 

#!/usr/bin/python

import paramiko
import os

def upload_dir(ip,port,username,password,local_dir,remote_dir):
    
    paramiko.util.log_to_file("paramiko.log")
    
    trans = paramiko.Transport((ip,port))
    trans.connect(username=username,password=password)

    sftp=paramiko.SFTPClient.from_transport(trans)

    try:
        sftp.mkdir(remote_dir)
    except Exception,e:
        pass

    a=os.path.join(remote_dir,local_dir.split("/")[-1])
    sftp.mkdir(a)

    for root, subdir, files in os.walk(local_dir):
        for dir in subdir:
            r_d = local_dir.split("/")[:-1]
            local_subdir = os.path.join(root,dir)
            l_d = local_subdir.split("/")
            r_m = l_d[len(r_d):]
            r_m = "/".join(r_m)
            remote_subdir = os.path.join(remote_dir,r_m)
            print remote_subdir
            sftp.mkdir(remote_subdir)
        for file in files:
            local_dir_path = os.path.join(root,file)
            l_d_p = local_dir_path.split("/")
            r_d_p = l_d_p[len(r_d):]
            r_d_p = "/".join(r_d_p)
            remote_dir_path = os.path.join(remote_dir,r_d_p)
            print remote_dir_path    
            sftp.put(local_dir_path,remote_dir_path)

 
def main():
    ip = "10.2.0.137"
    port = 22
    username = "root"
    password = "123456"
    local_dir = "/lll/api"
    remote_dir = "/kkkkkkkkkkkk"
    
    upload_dir(ip,port,username,password,local_dir,remote_dir)
  
if __name__ == "__main__":
    main() 

 

paramiko实现上传目录