python同步同步windows和和linux文件文件
写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,然后再利用网络copy,重复性
很大,就想着能不能写一个小脚本帮我同步。
逻辑:比对本地和服务器文件的md5,如果md5不一致,则备份服务器上的文件,将本地的给上传上去。
代码分为windows端和服务器端,有些东西,都让python一个做了,写着有点累,就想着,能否服务端提供一个端
口,windows去调用这个接口,来完成一部分工作。
python代码如下:
需要额外安装的包为是paramiko,安装方法:pip install paramiko即可,代码如下,利用paramiko的SSHClient来调用服务器自己
编写的API(嘿嘿,姑且叫做API)吧,Transport来实现sftp文件的上传,
#!/usr/bin/env python
import os
import hashlib
import paramiko
import time
import sys
def getmd5(filename):
filehash = hashlib.md5()
f = open(filename,'rb')
while True:
b=f.read(8096)
if not b:
break
filehash.update(b)
f.close()
return filehash.hexdigest()
def send_files(sftp,ssh,filename,abspathfile,server_dir):
try:
print ("删除文件",end=" ")
print (filename)
ssh.exec_command('bash /root/put_api.sh %s move' % filename)
print ("删除文件成功")
print ("开始上传文件")
server_file=server_dir + filename
sftp.put(abspathfile,server_file)
print ("文件上传成功")
except:
print ("文件上传失败")
def search_file(dir,path,ssh,server_dir):
#定义排除以md结尾的字符串
suffix='md'
#定义循环
print ("开启sftp")
t = paramiko.Transport(('myhostname',22))
t.connect(username='root',password='mypassword')
sftp = paramiko.SFTPClient.from_transport(t)
for filename in os.listdir(path):
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
print ("开始处理 %s" %(filename))
#如果以md结尾,就continue
if filename.endswith(suffix):
print ("不处理以md结尾")