自动同步2个目录python脚本

#!/usr/bin/python
# -*- coding: utf8 -*-
import os
import sys
import filecmp
import re
import shutil

file_list = []
def recursive_dir(dir1):
    """
    递归当前目录的文件和子目录
    :param dir1: 传参 需要递归的目录
    :return: 当前目录下所有文件和目录
    """
    curDir = os.path.abspath(dir1)
    file_list.append(curDir)
    l = os.listdir(curDir)
    for item in l:
        realitem = os.path.join(curDir, item)
        if os.path.isfile(realitem):
            file_list.append(realitem)
        if os.path.isdir(realitem):
            recursive_dir(realitem)
    return file_list

update_file_list = []
def comparame(dir1, dir2):
	"""
	递归比较2个目录的文件和目录
	:param dir1: 源目录
	:param dir2: 备份目录
	:return: 需要进行同步的文件和目录
	"""
    dircomp = filecmp.dircmp(dir1, dir2)

    # 源目录仅有的文件和目录
    only_in_dir1 = dircomp.left_only
    for item in only_in_dir1:
	item = os.path.join(dir1, item)
        if os.path.isfile(item):
	    # 如果是源目录仅有的文件,则直接添加到更新列表
            update_file_list.append(item)
        if os.path.isdir(item):
	    # 如果是源目录仅有的目录,则进行遍历,添加到更新列表
	    update_file_list.extend(recursive_dir(item))
		# 如果不对全局的接收列表清空,将会产生重复的条目
	    del file_list[:]

    # 文件名相同但其它属性或者内容不同的文件,这种也直接添加到更新列表
    diff_in_dir1 = dircomp.diff_files
    [update_file_list.append(os.path.join(dir1, x)) for x in diff_in_dir1]
	# 或者这样写
    #for item in diff_in_dir1:
	#	update_file_list.append(os.path.join(dir1, item))

    # 如果存在相同子目录,则递归遍历
    if len(dircomp.common_dirs) > 0:
        for item in dircomp.common_dirs:
            comparame(os.path.join(dir1, item), os.path.join(dir2, item))

	# 返回总的需要同步的列表清单
    return update_file_list

def main():
    dir1 = os.path.abspath(sys.argv[1])
    dir2 = os.path.abspath(sys.argv[2])
    #dir1 = os.path.abspath(‘../0111‘)
    #dir2 = os.path.abspath(‘../0110‘)
    #print "源目录是:", dir1
    #print "备份目录:", dir2

	# 更新文件列表
    source_files = comparame(dir1, dir2)
    for item in source_files:
		# 将源目录路径替换成备份目录路径
		dest_item = re.sub(dir1, dir2, item)
		# 如果需要同步的是目录,则创建
		if os.path.isdir(item):
			os.makedirs(dest_item)
		# 如果需要同步的是文件,则复制
		if os.path.isfile(item):
			shutil.copyfile(item, dest_item)

main()

最后将此脚本放进crontab任务即可。

时间: 2024-10-12 14:20:28

自动同步2个目录python脚本的相关文章

搭建服务器上的GIT并实现自动同步到站点目录(www)

原文链接:http://blog.csdn.net/baidu_30000217/article/details/51327289  方便自己记住使用 前言:当我们想要实现几个小伙伴合作开发同一个项目,或者建立一个资源分享平台的时候,GIT就是一个很好的选择.当然,既然是一个共有平台,那么把这个平台放到个人计算机上明显是不合适的,因此就要在服务器上搭建GIT了.另一个需求是,我们在本地开发,然后推送到服务器上,并且自动同步到web站点目录,这样就可以直接看到网页效果了,这就要实现自动同步.下面我

LDAP认证客户端、自动挂载用户家目录shell脚本配置

这个是LDAP认证客户端与自动挂载家目录shell脚本配置,使用"authconfig-tui"图形化配置简单,但是后面需要手动操作,自动写入配置文件还没有研究透彻.以后完善 #!/bin/bash yum install -y nss-pam-ldapd nfs-utils nfs autofs pam_ldap openldap openldap-clients #showmount -e 172.16.16.22 automaster="/etc/auto.master

svn提交自动同步到web目录

环境:CentOS6.5  测试线   svn和web服务器在同一台机器上   SVN版本1.6 情景:在测试环境下,开发部提出希望提交到SVN的代码能自动同步到WEB站点目录下,解决每次都要传双份这一问题,尤其是频繁更新后的繁琐,浪费了大量时间. 思路:通过搜索,查到svn的hooks目录的触发功能,该目录下有许多模板,其中一个是post-commit.tmpl,意为“提交后执行”,通过这个功能我们可以将提交代码后要做的事写到里面来执行. 步骤: 1. 首先导出一份svn的文件到网站目录 #

CentOS 创建SVN 服务器,并且自动同步到WEB 目录

一.安装Subversion #yum install subversion 二,基本的SVN服务器配置 1,新建一个目录用于存储SVN所有文件# mkdir /home/svn 2,新建一个版本仓库# svnadmin create /home/svn/project 3,初始化版本仓库中的目录# mkdir project project/server project/client project/test (建立临时目录)# svn import project/ file:///home

简单的打印二级目录 python脚本

#!/bin/python#coding:utf-8s = """*主机信息***1 基础信息2 cpu 信息3 硬盘信息 4 内存信息5 网卡信息 """while True:i1 = input(s+'\n请输入序号:') if i1 == '1': print(''' 1 主机名 2 当前登录用户数 3 操作系统 4 内核信息''') elif i1 == '2': print(''' 1 cpu 核心数 2 cpu 型号''') elif

Linux下svn提交文件后自动同步更新到网站目录

有时,对于多文件需要上传到服务器的时候将会很麻烦,但是如果使用svn的钩子脚本就容易实现本地提交svn后,自动同步代码文件到远程服务器的网站目录下,而不必手动上传了. 首先,在网站目录下checkout代码,例如我的目录是/data/www/test svn co https://127.0.0.1/test/trunk//data/www/test/ 注意,这是因为有时我会在服务器上直接修改代码,所以用checkout,如果不需要,可以用export,此指令不带.svn版本文件. 迁出代码后,

小型自动化运维--expect脚本之自动同步

小型自动化运维--expect脚本之自动同步 expect脚本可以运用于自动化运维多个方面,例如:可以自动到远程机器执行命令,也可以传输文件到远程机器上. 脚本如下: #!/usr/bin/expect set passwd "wtf" spawn rsync -av [email protected]:/tmp/shiyan.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:&

web服务文件更新自动同步、数据库主从复制、shell脚本实现网站代码备份和mysql备份

基搭建LAMP环境,并实践基于DNS做基于域名的虚拟主机中的环境,重新搭建一个同样的环境 要求: a)实现web服务文件更新的自动同步到另一台机器上 b)数据库实现主从复制 c)通过shell脚本实现网站源代码备份和mysql备份,备份策略包括全量备份.增量备份.差异备份 a,实现web服务文件更新的自动同步到另一台机器上: 1,在httpd服务器上建立基于FQDN的两个虚拟web站点,并创建相关目录. 2,修改测试windows主机的hosts文件,并编辑两个虚拟web站点对应的目录下的ind

yum搭建svn apache 利用钩子检出到web目录 自动同步

目的: 服务器上搭建svn,和apache,利用svn的 钩子 实现本地修改,同步到web目录下,使用yum装. 一: 关闭selinux,关闭防火墙或者开放相关端口. [[email protected] python]# vim /etc/selinux/config [[email protected] python]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SE