python+rsync精確同步指定格式文件
更新時(shí)間:2019年08月29日 10:34:07 作者:gcogle
這篇文章主要為大家詳細(xì)介紹了python+rsync精確同步指定格式文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了python+rsync精確同步指定格式文件的具體代碼,供大家參考,具體內(nèi)容如下
# coding: utf-8
#!/usr/bin/env python
'''
updatedb更新本地服務(wù)器指定目錄/home/upload/de locate.dbz數(shù)據(jù)庫
然后locate命令正則查找符合條件的文件并將文件名輸出到locate.src
通過paramiko模塊得到遠(yuǎn)程服務(wù)器符合條件的文件并將文件名輸出到locate.dst
比較這兩個(gè)文件得到locate.diff,最好rsync命令同步locate.diff列表中的文件
到遠(yuǎn)程服務(wù)器
'''
import paramiko
import commands
import os
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename='/var/log/upload_to_chengdu.log',
filemode='a')
logging.info("###################################################################")
hostname = '8.8.8.8'
username = 'username'
password = 'password'
port = 22
locate_lists = ['/tmp/locate.src', '/tmp/locate.dst', '/tmp/locate.diff']
dict_path = {'locate_lists': locate_lists, 'dst_db': '/tmp/locate.db',
'src_db': '/tmp/locate.db', 'dst_path': '/logs/rsync_log/',
'src_path': '/home/upload/', 'passwd_file': '/etc/rsync.pas'}
def check_file():
for l in dict_path['locate_lists']:
if os.path.exists(l):
commands.getstatusoutput('sudo rm %s' % l)
def get_dst_list():
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname=hostname, port=port, username=username, password=password)
cmd_create = "sudo updatedb -U %s -o %s && sudo locate -d %s --regex '.*[0-9]{4}([-]{0,1}[0-9]{2}){2}\..*gz$' >>%s" % (
dict_path['dst_path'], dict_path['dst_db'], dict_path['dst_db'], dict_path['locate_lists'][1])
cmd_delete = 'sudo rm ' + dict_path['locate_lists'][1]
stdin, stdout, stderr = s.exec_command(cmd_create)
# print stdout.read()
try:
t = paramiko.Transport((hostname, port))
t.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get(dict_path['locate_lists'][1], dict_path['locate_lists'][1])
t.close()
except Exception, e:
print e
stdin, stdout, stderr = s.exec_command(cmd_delete)
s.close()
def get_src_list():
cmd = "sudo updatedb -U %s -o %s && sudo locate -d %s --regex '.*[0-9]{4}([-]{0,1}[0-9]{2}){2}\..*gz$' >>%s" % (
dict_path['src_path'], dict_path['src_db'], dict_path['src_db'], dict_path['locate_lists'][0])
commands.getstatusoutput(cmd)
def cmp_diff():
f1 = open(dict_path['locate_lists'][0], 'r')
f2 = open(dict_path['locate_lists'][1], 'r')
f3 = open(dict_path['locate_lists'][2], 'a')
x = f1.readlines()
y = f2.readlines()
f1.close()
f2.close()
for i in x:
j = dict_path['dst_path'] + i[13:]
if j not in y:
f3.writelines(i)
f3.close()
def rsync_file():
f = open(dict_path['locate_lists'][2], 'r')
for i in f.readlines():
cmd = 'cd %s && sudo rsync -Rvz %s upload@%s::aliyun_log --password-file=%s' % (
dict_path['src_path'], i.strip('\n')[13:], hostname, dict_path['passwd_file'])
logging.info(cmd)
commands.getstatusoutput(cmd)
f.close()
def del_locate_file():
cmd = 'sudo rm {%s,%s,%s}' % (dict_path['locate_lists'][1], dict_path['locate_lists'][0], dict_path['locate_lists'][2])
commands.getstatusoutput(cmd)
if __name__ == '__main__':
check_file()
get_dst_list()
get_src_list()
cmp_diff()
rsync_file()
del_locate_file()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Pandas數(shù)據(jù)結(jié)構(gòu)詳細(xì)說明及如何創(chuàng)建Series,DataFrame對(duì)象方法
本篇文章中,我們主要側(cè)重于介紹Pandas數(shù)據(jù)結(jié)構(gòu)本身的特性,以及如何創(chuàng)建一個(gè)Series或者DataFrame數(shù)據(jù)對(duì)象,并填入一些數(shù)據(jù)2021-10-10
Python實(shí)戰(zhàn)使用XPath采集數(shù)據(jù)示例解析
這篇文章主要為大家介紹了Python實(shí)戰(zhàn)之使用XPath采集數(shù)據(jù)實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-04-04
Python機(jī)器學(xué)習(xí)之決策樹算法實(shí)例詳解
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)之決策樹算法,較為詳細(xì)的分析了實(shí)例詳解機(jī)器學(xué)習(xí)中決策樹算法的概念、原理及相關(guān)Python實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12

