网上大部分都是上传文件,于是个人参照网上一些博客的内容,写了一个把windows上目录上传到远程linux的一个小程序。
下面是代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
class ExportPrepare( object ):
def __init__( self ):
pass
t.connect(username = self .username, password = self .password)
return t
# 找到所有你要上传的目录已经文件。
def __get_all_files_in_local_dir( self , local_dir):
all_files = list ()
if os.path.exists(local_dir):
files = os.listdir(local_dir)
for x in files:
filename = os.path.join(local_dir, x)
print "filename:" + filename
# isdir
if os.path.isdir(filename):
all_files.extend( self .__get_all_files_in_local_dir(filename))
else :
all_files.append(filename)
else :
print '{}does not exist' . format (local_dir)
return all_files
# Copy a local file (localpath) to the SFTP server as remotepath
def sftp_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)
if remote_dir[ - 1 ] = = '/' :
remote_dir = remote_dir[ 0 : - 1 ]
all_files = self .__get_all_files_in_local_dir(local_dir)
for x in all_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)
print stderr.read()
remote_filename = path + '/' + filename
print u 'Put files...' + filename
sftp.put(x, remote_filename)
ssh.close()
except Exception, e:
print e
if __name__ = = '__main__' :
export_prepare = ExportPrepare()
export_prepare.sftp_put_dir()
|
比较匆忙,不足之处可以指出,共同进步。
以上这篇python paramiko利用sftp上传目录到远程的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/zdpyouzhe/article/details/52953677