python paramiko利用sftp上传目录到远程的实例
网上大部分都是上传文件,于是个人参照网上一些博客的内容,写了一个把windows上目录上传到远程linux的一个小程序。
下面是代码:
classExportPrepare(object):
def__init__(self):
pass
defsftp_con(self):
t=paramiko.Transport((self.ip,self.port))
t.connect(username=self.username,password=self.password)
returnt
#找到所有你要上传的目录已经文件。
def__get_all_files_in_local_dir(self,local_dir):
all_files=list()
ifos.path.exists(local_dir):
files=os.listdir(local_dir)
forxinfiles:
filename=os.path.join(local_dir,x)
print"filename:"+filename
#isdir
ifos.path.isdir(filename):
all_files.extend(self.__get_all_files_in_local_dir(filename))
else:
all_files.append(filename)
else:
print'{}doesnotexist'.format(local_dir)
returnall_files
#Copyalocalfile(localpath)totheSFTPserverasremotepath
defsftp_put_dir(self):
try:
#本地test目录上传到远程root/usr/下面
local_dir="c:/test"
remote_dir="/root/usr/test"
t=self.sftp_con()
sftp=paramiko.SFTPClient.from_transport(t)
#sshclient
ssh=paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(self.ip,port=self.port,username=self.username,password=self.password,compress=True)
ssh.exec_command('rm-rf'+remote_dir)
ifremote_dir[-1]=='/':
remote_dir=remote_dir[0:-1]
all_files=self.__get_all_files_in_local_dir(local_dir)
forxinall_files:
filename=os.path.split(x)[-1]
remote_file=os.path.split(x)[0].replace(local_dir,remote_dir)
path=remote_file.replace('\\','/')
#创建目录sftp的mkdir也可以,但是不能创建多级目录所以改用ssh创建。
tdin,stdout,stderr=ssh.exec_command('mkdir-p'+path)
printstderr.read()
remote_filename=path+'/'+filename
printu'Putfiles...'+filename
sftp.put(x,remote_filename)
ssh.close()
exceptException,e:
printe
if__name__=='__main__':
export_prepare=ExportPrepare()
export_prepare.sftp_put_dir()
比较匆忙,不足之处可以指出,共同进步。
以上这篇pythonparamiko利用sftp上传目录到远程的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。