返回顶部
首页 > 资讯 > 操作系统 >python同步windows和linux文件
  • 267
分享到

python同步windows和linux文件

python同步windows文件python同步linux文件python同步文件 2022-06-04 23:06:39 267人浏览 泡泡鱼
摘要

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

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结尾")
      continue
    
    #定义绝对路径
    abspathfile=dir + '\\' + filename

    #获取文件的md5
    localfilemd5=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 result

def 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_installNtIntazhGC_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 - starttime
  print (usedtime,end=" ")
  print ("s")
  
  
if __name__ == "__main__" :
  main()

Linux 自己编写的API:


#!/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"

    #判断第二个参数是否是move
    if [ 'move' == $2 ];then
      #判断是否存在备份目录,没有则存在,有则挪至备份目录
      if [ -d $backdir ];then
        nowtime=`date +"%F_%H:%M:%S"`
        
        mv $abs_filename $backdir$1_$nowtime
        
        if [ 0 -eq $? ];then
          echo "move successful"
        else
          echo "move failed"
        fi
        
      else
        mkdir -p $backdir
      fi
    fi    

  else
    #报错,没有这个文件
    echo "$1 No such file or directory"
  fi

else
  #报错,参数错误
  echo "Parameter error"
fi

最终实现的功能如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

--结束END--

本文标题: python同步windows和linux文件

本文链接: https://lsjlt.com/news/20532.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python同步windows和linux文件
    写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,然后再利用网络copy,重复性很大,就想着能不能写一个小脚本帮我同步 逻辑:比对本地和服务器文件的md5,如果md5不...
    99+
    2022-06-04
    python同步windows文件 python同步linux文件 python同步文件
  • Python同步文件
    最近在做Python开发,研究了技术大牛写的脚本,在他的脚本上做了优化。优化脚本已在做过测试还是挺好用的,如果你觉得不错就直接拿到生产用吧。先直接放代码出来:-----------------------------------------...
    99+
    2023-01-31
    文件 Python
  • Python和Windows:如何实现Numpy同步?
    NumPy是Python中用于数值计算的一个强大的库,它提供了高效的多维数组和矩阵运算功能。在使用NumPy时,常常需要在Windows平台上与其他库进行同步。在本文中,我们将介绍如何在Windows上实现NumPy同步的方法。 首先,我...
    99+
    2023-08-30
    windows numpy 同步
  • Linux文件同步rsync是怎样的
    这篇文章将为大家详细讲解有关Linux文件同步rsync是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync”算法,...
    99+
    2023-06-28
  • Windows 同步:Python 和 JavaScript 的对比分析
    在 Windows 操作系统中,同步是一种非常重要的概念。同步可以让不同的应用程序之间协调工作,共享数据,并保持一致性。在本文中,我们将比较 Python 和 JavaScript 的同步机制,看看它们在 Windows 平台上的优劣势。...
    99+
    2023-09-09
    javascript windows 同步
  • 在Linux下怎么使用rsync对比和同步文件
    本篇内容主要讲解“在Linux下怎么使用rsync对比和同步文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在Linux下怎么使用rsync对比和同步文件”吧!排除文件和目录列表有时候,当我们...
    99+
    2023-06-13
  • 如何在Python和Bash之间同步日志文件?
    在日常的开发和运维中,我们经常需要在不同的系统和工具之间同步日志文件,以便更好地分析和监控应用程序的运行情况。Python和Bash都是常用的工具,在本文中,我们将介绍如何使用Python和Bash之间同步日志文件。 一、Python和Ba...
    99+
    2023-07-27
    bash 同步 日志
  • Linux系统怎么实现文件同步
    Linux系统怎么实现文件同步,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Linux系统实现文件同步的方法一、准备源文件地址:192.168.0.143目标文...
    99+
    2023-06-28
  • 如何使用 Python 和 JavaScript 实现 Windows 同步?
    随着互联网的发展,人们越来越依赖云服务来存储和分享数据。但是,当我们需要在不同的设备之间同步数据时,我们可能会遇到一些问题。例如,我们可能需要在 Windows 操作系统和其他操作系统之间同步数据。在这种情况下,Python 和 JavaS...
    99+
    2023-09-09
    javascript windows 同步
  • Windows和Linux文件系统的索引机制有何不同?
    Windows和Linux是两个常见的操作系统,它们有着不同的文件系统,其中一个显著的区别就是它们的索引机制不同。本文将介绍Windows和Linux文件系统的索引机制的差异,并通过演示代码来展示它们的不同之处。 一、Windows文件系统...
    99+
    2023-09-03
    linux 索引 windows
  • python windows系统时间同步
    #!/usr/bin/env python # coding: utf8 # Usage: 指定ntpserver域名到ntpserver_domains变量即可 import socket import struct import ti...
    99+
    2023-01-31
    时间 系统 python
  • python同步windows系统时间
    import os com1 = 'net use \\\\192.168.0.90\\ipc$ PPss01!123/user:administrator' os.system(com1) com2='net time \\\\192....
    99+
    2023-01-31
    时间 系统 python
  • Linux文件同步到本地怎么实现
    要将Linux系统中的文件同步到本地,可以通过以下几种方式实现: 使用rsync命令:rsync命令是一种高效的文件同步工具,可...
    99+
    2023-10-27
    Linux
  • 软件解决Linux和Windows双启动带来的时间同步问题
    这篇文章给大家分享的是有关软件解决Linux和Windows双启动带来的时间同步问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。想在保留 Windows 系统的前提下尝试其他 Linux 发行版,双启动是个常用...
    99+
    2023-06-16
  • Windows 同步:Python 和 JavaScript 的优缺点有哪些?
    在当今的互联网时代,数据的同步是非常重要的一个环节。不论是作为个人用户还是企业用户,数据同步的需求都是非常普遍的。而在数据同步的实现过程中,编程语言的选择也是非常重要的一个因素。在本文中,我们将会探讨 Python 和 JavaScrip...
    99+
    2023-09-09
    javascript windows 同步
  • Windows 同步:Python 和 JavaScript 的新趋势是什么?
    在计算机科学领域,数据同步是一项非常重要的任务。它可以确保在不同的设备和系统之间保持数据的一致性和完整性。在 Windows 操作系统中,Python 和 JavaScript 成为了最新的数据同步趋势。在本文中,我们将探讨这两种语言在 ...
    99+
    2023-09-09
    javascript windows 同步
  • Windows8系统设置同步(Windows设置同步、应用同步等)图文教程
    Windows设置同步 在Windows8中要想登录到系统中默认需要一个账户,账户类型有两种,一种是本地新创建的账户,另一种就是新的Microsoft帐户了。如果用本地账户登录的话不会将设置在你使用的电脑之...
    99+
    2022-06-04
    系统设置 图文 教程
  • 云文件数据同步
    ...
    99+
    2020-05-26
    云文件数据同步
  • 如何实现rsync同步隐藏文件和排除文件
    本篇内容主要讲解“如何实现rsync同步隐藏文件和排除文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现rsync同步隐藏文件和排除文件”吧!rsync同步命令的基本写法rsync&nb...
    99+
    2023-06-10
  • 如何在 Windows 上使用 Python 和 JavaScript 实现同步?
    随着Python和JavaScript的广泛应用,越来越多的开发者希望在Windows系统上使用这两种语言实现同步。Python和JavaScript都是一种高级编程语言,它们都具有优秀的性能和易于学习的特点。本文将介绍如何在Windows...
    99+
    2023-09-09
    javascript windows 同步
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作