python ssh sftp 同步目录脚本

 
python 通过 ssh sftp 实现目录同步(windows -> linux )(linux ->linux):(确认modules ,请自行安装)
 
代码如下:
 
# -*- coding:utf-8 -*-
import paramiko
import os
import time
import datetime

def __get_all_files_in_local_dir(local_dir):
# 保存所有文件的列表
all_files = list()

# 获取当前指定目录下的所有目录及文件,包含属性值
files = os.listdir(local_dir)
for x in files:
# local_dir目录中每一个文件或目录的完整路径
filename = os.path.join(local_dir, x)
# 如果是目录,则递归处理该目录
if os.path.isdir(x):
all_files.extend(__get_all_files_in_local_dir(filename))
else:
all_files.append(filename)
return all_files

def sftp_put_dir(local_dir, remote_dir):


t = paramiko.Transport(sock=('ip', 22))
t.connect(username='root', password='')
sftp = paramiko.SFTPClient.from_transport(t)

# 去掉路径字符穿最后的字符'/',如果有的话
if remote_dir[-1] == '/':
remote_dir = remote_dir[0:-1]

# 获取本地指定目录及其子目录下的所有文件
all_files = __get_all_files_in_local_dir(local_dir)

try:
sftp.stat(remote_dir)
except IOError:
trans = paramiko.Transport(('ip', 22))
# 建立连接
trans.connect(username='root', password='')

# 将sshclient的对象的transport指定为以上的trans
ssh = paramiko.SSHClient()
ssh._transport = trans
#通过ssh创建多级目录
ssh.exec_command('mkdir -p ' + remote_dir)
trans.close()
#sftp.mkdir(remote_dir) 只能创建一级目录
# 依次put每一个文件
for x in all_files:
filename = os.path.split(x)[-1]
remote_filename = remote_dir + '/' + filename
try:
sftp.stat(remote_filename)
except IOError:
print u'%s uploading...' % filename
sftp.put(x, remote_filename)
sftp.close()

if __name__ == '__main__':
now = datetime.datetime.now()
dir_name = now.strftime('%Y')+'/'+now.strftime('%m')+'/'+now.strftime('%d')
sftp_put_dir("/Applications/XAMPP/htdocs/keywords/toutiao-master/upload/"+dir_name,
"/root/upload/"+dir_name)

自行替换 IP user password
 

0 个评论

要回复文章请先登录注册