生产情况:tomcat下业务log备份,目录分多级,然后对应目录格式放到ftp上;所以,结构上 我就是一级一级目录进行判断(因为我没有找到在ftp一次判断其子目录是否存在),还有一个low点就是我没有找到怎样一次性的调用ftp的login因为现在每次判断都需要登录一下,最终功能是实现了;想着先贴出来

#!/usr/local/bin/python3.5
###Description: 上传业务log到NFS199
###Author: Danny.Deng
###DateTime: 2016-11-25
import os,sys,shutil,time,datetime,re,socket,subprocess,ftplib
##########################
backup_dir = "/dockerlogs/"
###############ip地址依赖hosts文件中的hostname解析
ip_addr = socket.gethostbyname(socket.gethostname())
ports = sorted(os.listdir(backup_dir))
yesterday = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y%m%d")
thirday = (datetime.datetime.now() - datetime.timedelta(days=2)).strftime("%Y%m%d")
yearday = (datetime.datetime.now() - datetime.timedelta(days=365)).strftime("%Y%m%d")
###############取log文件
pattern = re.compile(r'' + thirday + '*.log$' )
year_pattern = re.compile(r'' + yearday + '*.log$' )
#pattern = re.compile(r'' + thirday + '*.log' )
###############取服务端口列表目录
for port in (ports):
port_dir = backup_dir + port
ftp_dir = ip_addr + "/" + port
##############判断ftp上是否有对应目录,没有则创建,此次判断是两个目录 如:192.168.20.130/8000 这两级是否存在
ftp = ftplib.FTP("192.168.xxxxx")
ftp.login("syxxx","xxxx",10)
try:
ftp.mkd(ip_addr)
ftp.cwd(ip_addr)
try:
ftp.mkd(port)
ftp.quit()
except ftplib.error_perm:
ftp.quit()
except ftplib.error_perm:
ftp.cwd(ip_addr)
try:
ftp.mkd(port)
ftp.quit()
except ftplib.error_perm:
ftp.quit()
##############取端口目录下的service目录
for services in sorted(os.listdir(port_dir)):
services_dir = port_dir + "/" + services
##############判断services目录是否存在,即第三级 如:192.168.20.130/8000/yunwei
ftp = ftplib.FTP("19xxxxx")
ftp.login("sxxx","sxxxxx",10)
try:
ftp.cwd(ftp_dir)
except ftplib.error_perm:
pass
try:
ftp.mkd(services)
except ftplib.error_perm:
ftp.quit()
#############遍历service目录中的符合的文件
for file in sorted(os.listdir(services_dir)):
match = pattern.search(file)
y_match = year_pattern.search(file)
if match:
#############匹配到文件后进行 文件名 更换操作,方便上传
ftpdir_service = ftp_dir + "/" + services
#############登录到ftp上的对应目录,准备上传
ftp = ftplib.FTP("xxxxx")
ftp.login("xxxxx","xxxxxx",10)
try:
ftp.cwd(ftpdir_service)
except ftplib.error_perm:
pass
filename = services_dir + "/" + file
file_gz = file + ".gz"
#############上传压缩文件到ftp
os.environ['filename'] = str(filename)
os.system('gzip $filename')
filename_gz = filename + ".gz"
#############只读模式打开本地需要上传的文件
filename_put = open(filename_gz,'rb')
ftp.storbinary('STOR %s' % os.path.basename(filename_gz),filename_put)
os.remove(filename_gz)
#############替换文件日期,即取出一年前的文件格式进行后续的ftp.delete
year_filename = filename_gz.replace(thirday,yearday)
#############错误处理,如果文件不存在时 pass
#ftp.dir(file_gz)
try:
ftp.delete(year_filename)
except ftplib.error_perm:
pass

  

最新文章

  1. [No000093]按住Alt 再按数字键敲出任意汉字和字符!
  2. Go语言常用命令介绍
  3. 总结Objective-c常用算法
  4. ios图片拉伸两种方法
  5. 【转】linux之mkfs/mke2fs格式化
  6. PhyreEngine3.8 MSAA resolution
  7. HDU 4612 Warm up (边双连通分量+DP最长链)
  8. ###《More Effective C++》- 基础议题
  9. 二:java语法基础:
  10. Visual Studio使用技巧记录
  11. [原]android sdk更新的终极解决方案
  12. tk mybatis通用mapper,复杂and or条件查询
  13. java基础 lang包 详细介绍
  14. Java虚拟机运行时数据区域及垃圾回收算法
  15. Python-类与对象
  16. Good, then we can start
  17. HDU 5988.Coding Contest 最小费用最大流
  18. 用js实现个优先队列吧
  19. 转:oracle:win7手工卸载oracle数据库11g
  20. 《Java程序设计》第12周课堂实践总结

热门文章

  1. Rotate
  2. 【poj3070】矩阵乘法求斐波那契数列
  3. Lea指令计算地址(用于四则混合运算),附上一个函数调用例子及其反汇编代码,很清楚
  4. Service知识点总结
  5. VirtualBox虚拟机中启用usb3.0却无法显示u盘的解决方法
  6. 水平/竖直居中在旧版Safari上的bug
  7. java的版本区别、下载、配置
  8. Android学习笔记12:图像渲染(Shader)
  9. Automatic Code Generation-->Implement Interface
  10. 《IT运维之道》