写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,然后再利用网络copy,重复性很大,就想着能不能写一个小脚本帮我同步

逻辑:比对本地和服务器文件的md5,如果md5不一致,则备份服务器上的文件,将本地的给上传上去

代码分为windows端和服务器端,有些东西,都让python一个做了,写着有点累,就想着,能否服务端提供一个端口,windows去调用这个接口,来完成一部分工作

python代码如下:

需要额外安装的包为是paramiko,安装方法:pip install paramiko即可,代码如下,利用paramiko的SSHClient来调用服务器自己编写的API(嘿嘿,姑且叫做API)吧,Transport来实现sftp文件的上传,

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#!/usr/bin/env pythonimport os
import hashlib
import paramiko
import time
import sysdef getmd5(filename):filehash = hashlib.md5()f = open(filename,'rb')while True:b=f.read(8096)if not b:breakfilehash.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 + filenamesftp.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结尾,就continueif filename.endswith(suffix):print ("不处理以md结尾")continue#定义绝对路径abspathfile=dir + '\\' + filename#获取文件的md5localfilemd5=getmd5(abspathfile)+'\n'byte_localfilemd5=localfilemd5.encode(encoding="gb2312")print ("%s md5值 %s" %(filename,byte_localfilemd5))serverfilemd5=get_server_md5(ssh,filename)print ("%s 服务器md5值 %s" %(filename,serverfilemd5))if byte_localfilemd5 == serverfilemd5 :print ("md5值一致,不需要上传")else:print ("md5值不一致,上传文件")#        send_files(sftp,ssh,filename,abspathfile,server_dir)try:
#                send_files(ssh,filename,abspathfile,server_dir)send_files(sftp,ssh,filename,abspathfile,server_dir)except:print ("上传失败...")print ("关闭sftp")t.close()def get_server_md5(ssh,filename):stdin,stdout,stderr = ssh.exec_command('bash /root/put_api.sh %s' % filename)result = stdout.read()return resultdef main():starttime=time.time()print ("脚本开始同步")print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))try:ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(hostname='myhostname',port='22',username='root',password='mypassword')except:print ("服务器连接失败,异常退出")sys.exit(-1)#定义路径local_dir = 'E:\\TEMP\\note_html'server_dir= '/root/nginx_02/'#利用函数排除文件search_file(local_dir,local_dir,ssh,server_dir)#    print (get_server_md5(ssh,'d0180727_install_rabbitmt_png_06.png'))ssh.close()endtime=time.time()print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))print ("服务器断开连接,本次文件更新成功")print ("本次更新时间为:%.2f s" %(endtime - starttime))print ("更精确的时间:",end=" ")usedtime = endtime - starttimeprint (usedtime,end=" ")print ("s")if __name__ == "__main__" :main()

Linux 自己编写的API:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#!/bin/bash #判断参数的个数是否大于等于1
if [ $# -ge 1 ];then#定义文件夹root_dir="/root/nginx_02/"backdir="/root/.backup/"abs_filename=$root_dir$1#判断是否有这个文件if [ -f $abs_filename ];then#利用md5sum工具获取文件的md5值getfilemd5=`md5sum $abs_filename | awk '{print $1}'`echo "$getfilemd5"#判断第二个参数是否是moveif [ 'move' == $2 ];then#判断是否存在备份目录,没有则存在,有则挪至备份目录if [ -d $backdir ];thennowtime=`date +"%F_%H:%M:%S"`mv $abs_filename $backdir$1_$nowtimeif [ 0 -eq $? ];thenecho "move successful"elseecho "move failed"fielsemkdir -p $backdirfifi        else#报错,没有这个文件echo "$1 No such file or directory"fielse#报错,参数错误echo "Parameter error"
fi

最终实现的功能如下:

利用python同步windows和linux文件相关推荐

  1. python定时开关机的代码_利用Python实现Windows定时关机功能

    是最初的几个爬虫,让我认识了Python这个新朋友,虽然才刚认识了几天,但感觉有种莫名的默契感.每当在别的地方找不到思路,总能在Python找到解决的办法.自动关机,在平时下载大文件,以及跑程序的时候 ...

  2. python分析pcap文件_利用Python库Scapy解析pcap文件的方法

    每次写博客都是源于纳闷,python解析pcap这么常用的例子网上竟然没有,全是一堆命令行执行的python,能用吗?玩呢? pip安装scapy,然后解析pcap: import scapy fro ...

  3. abaqus python 读取文件_利用Python修改Abaqus的inp文件(关键字)

    利用Python修改Abaqus的inp文件(关键字) Abaqus的关键字可以直接打开inp文件或者在Abaqus的key word里面直接修改,当然除了这个,还可以利用Python语言进行修改,也 ...

  4. python修改桌面壁纸_利用Python对windows桌面自动更换壁纸

    根据时间星期几判断用哪张壁纸 # !/usr/bin/env python3 # -*- coding:utf-8 -*- import requests # import pywintypes im ...

  5. FTP文件传输协议(实现windows与linux文件互传)

    FTP文件传输协议(实现windows与linux文件互传) 目录 FTP文件传输协议(实现windows与linux文件互传) 一.FTP概述 二.FTP通信端口 三.FTP数据连接 四.FTP连接 ...

  6. python实现按键精灵的功能_利用Python实现Windows下的鼠标键盘模拟的实例代码

    本文介绍了利用Python实现Windows下的鼠标键盘模拟的实例代码,分享给大家 本来用按键精灵是可以实现我的需求,而且更简单,但既然学python ,就看一下呗. 依赖: pip install ...

  7. 利用 Python 破解 ZIP 或 RAR 文件密码

    利用 Python 破解 ZIP 或 RAR 文件密码 破解原理 实验环境 库 利用 Pipenv 安装 rarfile 编码 准备密码本 读取压缩文件 尝试解压 暴力破解 程序入口 使用 运行结果: ...

  8. 利用Python将多个excel文件合并为一个文件

    利用Python,将多个excel文件合并为一个文件 思路 利用python xlrd包读取excle文件,然后将文件内容存入一个列表中,再利用xlsxwriter将内容写入到一个新的excel文件中 ...

  9. linux学习笔记-windows和linux文件互传

    目录 概述: FTP说明: 操作方式: linux 下FTP环境搭建: Windows 下FTP环境搭建 1.使用windows自带的FTP登录 windows建立快捷登录文件夹 2.使用FileZi ...

最新文章

  1. 使用face_recognition(二)目标人脸“实时”检测
  2. mysql注入反弹_Discuz!x xss反弹后台无防御sql注入getshell(附带exploit)
  3. Ubuntu 16.04修改显示字体大小(包括GNOME/Unity)
  4. ElasticSearch之动态映射和模板
  5. python flask源码解析_浅谈flask源码之请求过程
  6. vb mysql_VB连接MYSQL实例
  7. 云服务器 管理控制台_关于小白如何初步管理自己的云服务器
  8. TensorFlow 辨异 —— tf.placeholder 与 tf.Variable
  9. PHP 下载pdf预览和下载pdf文件
  10. 农产品SCM供应链协同系统解决方案
  11. rose双机热备mysql,实战:ROSE HA双机热备系统安装指南
  12. msi笔记本u盘装linux,msi微星笔记本bios设置u盘启动教程
  13. MySQL 表空间碎片
  14. linux 云主机 管理软件,常用6款云服务器管理软件(上)
  15. Win10 任务管理器的 N 多技巧:老鸟也未必知道
  16. newman工具的运用
  17. 姿态估计2-08:PVNet(6D姿态估计)-源码无死角解析(4)-RANSAC投票机制
  18. MySQL分页查询 offset
  19. 如何彻底删除MySQL服务
  20. 去除Reloaded modules: lib, lib.utils, lib.metrics, lib.data_preparation, model, model.model_config

热门文章

  1. PowerShell图形化编程2-快速入门
  2. jvisualvm远程监控Tomcat
  3. 移动端利用-webkit-box水平垂直居中
  4. ueditor1.4.3配置过程(包含单独上传文件以及图片的使用)
  5. Java学习资料-SimpleFactory
  6. 如何删除有病毒的网站?
  7. 【学习笔记】CO-PA 简介
  8. 实际价格计算:确定方法
  9. ABAP数据库操作之操作语句Insert
  10. 批量生成销售订单、退货订单