#!/usr/bin/env bash

source /etc/profile

echo " *************** start filter ***************  "

# get befor six month last day

#m0=$(date -d "$(date -d 'month' +%Y%m01) -1 day" +%Y%m%d)

#echo ${m0}

#m1=$(date -d "$(date -d '0 month' +%Y%m01) -1 day" +%Y%m%d)

#echo ${m1}

#m2=$(date -d "$(date -d last-month +%Y%m01) -1 day" +%Y%m%d)

#echo ${m2}

#m3=$(date -d "$(date -d ${m2} +%Y%m01) -1 day" +%Y%m%d)

#echo ${m3}

#m4=$(date -d "$(date -d ${m3} +%Y%m01) -1 day" +%Y%m%d)

#echo ${m4}

#m5=$(date -d "$(date -d ${m4} +%Y%m01) -1 day" +%Y%m%d)

#echo ${m5}

#m6=$(date -d "$(date -d ${m5} +%Y%m01) -1 day" +%Y%m%d)

#echo ${m6}

# 取得当前月的最后一天,访问数组长度:${#m[*]} + ${#m[@]}

m[0]=$(date -d "$(date -d 'month' +%Y%m01) -1 day" +%Y%m%d)

echo m0 : ${m[0]} ' month : ' ${#m[@]}

for n in $(seq 0 11); do

    m[$n+1]=$(date -d "$(date -d ${m[$n]} +%Y%m01) -1 day" +%Y%m%d)

    echo m$[$n+1] : ${m[$n+1]} ' month : ' ${#m[*]};

done

echo " ****** time : " $(date '+%Y-%m-%d %H:%M:%S') " ****** "

max_date=0

# get the latest file and copy to hdfs

cd /home/hadoop/streaming_run_center/tmp/checkpoint/filter

for dir in $(ls -l ./ | awk '/^d/{print $NF}')

do

   if [[ -d $dir && $dir == *\_* ]]; then

      f_d=$(echo $dir | cut -d \_ -f 3 | cut -d \. -f 1)

      if [[ $max_date < $f_d ]]; then

        max_date=$f_d

        max_filter=$dir

      fi

   fi

done

echo " max date is : "$max_date

echo " max filter is : "$max_filter

pwd

# 复制最近日期的filter文件到hdfs

hadoop fs -test -e /data/datacenter/run_center_spark_stream/bloom_filters/$max_filter

if [[ $? == 0 ]]; then

    echo " filter is already exist : "$max_filter

else

    echo " start hdfs copy "

    echo " ****** start time : " $(date '+%Y-%m-%d %H:%M:%S') " ****** "

    hadoop fs -put $max_filter /data/datacenter/run_center_spark_stream/bloom_filters

    echo " ****** end time : " $(date '+%Y-%m-%d %H:%M:%S') " ****** "

fi

remove_week=$(date -d "$max_date 7 days ago" +%Y%m%d)

echo " 删除本地序列化文件的日期界限:"$remove_week

remove_date=$(date -d "$max_date 30 days ago" +%Y%m%d)

echo " 删除文件 和 Hadoop filter 的日期界限:"$remove_date

echo " *************** start remove filter ***************  "

for r_dir in $(ls -l ./ | awk '/^d/{print $NF}')

do

   if [[ -d $r_dir && $r_dir == *\_* ]]; then

      r_d=$(echo $r_dir | cut -d \_ -f 3 | cut -d \. -f 1)

      if [[ $r_d < $remove_date ]]; then

          if [[ ${m[*]} == *$r_d* ]]; then

              cd /home/hadoop/streaming_run_center/tmp/checkpoint/filter/$r_dir

              pwd

              for f_dir in $(ls *)

              do

                 if [[ "$f_dir" == "mau_device_all.FILTER.SER" ]]; then

                    echo " ------ keep mau_filter is: " $f_dir;

                 else

                    echo " remove file is: " $f_dir;

                    rm -r $f_dir

                 fi

              done

              cd /home/hadoop/streaming_run_center/tmp/checkpoint/filter

              pwd

          else

              echo " remove filter_dir is: "$r_dir

              rm -r $r_dir

          fi

      elif [[ $r_d < $remove_week ]]; then

          if [[ $r_d == $m0 || $r_d == $m1 || $r_d == $m2 ]]; then

              cd /home/hadoop/streaming_run_center/tmp/checkpoint/filter/$r_dir

              pwd

              for f_dir in $(ls *)

              do

                 if [[ "$f_dir" == "mau_device_all.FILTER.SER" ]]; then

                    echo " ------ week keep mau_filter is: " $f_dir;

                 else

                    if [[ "$f_dir" == *.FILTER.SER ]]; then

                        echo " - last day of month - week remove file is: " $f_dir;

                        rm -r $f_dir

                    fi

                 fi

              done

              cd /home/hadoop/streaming_run_center/tmp/checkpoint/filter

              pwd

          else

              echo "week remove filter is: "$r_dir

              rm -r $r_dir/*.FILTER.SER

          fi

      fi

   fi

done

echo " =============== start remove hdfs filter ===============  "

# 删除hdfs上指定日期外的tdid

for h_filter in $(hadoop fs -ls /data/datacenter/run_center_spark_stream/bloom_filters | awk '{print $8}')

do

    if [[ $h_filter == *\_* ]]; then

        h_date=$(echo $h_filter | cut -d \/ -f 6 | cut -d \_ -f 3 | cut -d \. -f 1)

#        echo " hdfs date : "$h_date

#        echo " hdfs filter : "$h_filter

        if [[ ${m[*]} == *$h_date* ]]; then

            echo " remain hdfs filter is : "$h_filter

        elif [[ $h_date < $remove_date ]]; then

            echo "not remain date is : "$h_date

            echo "remove hdfs filter is : "$h_filter

            hadoop fs -rmr $h_filter

        fi

    fi

done

echo " -------------- start tdid ---------------  "

# 删除小于30天的tdid

cd /home/hadoop/streaming_run_center/tmp/checkpoint/tdidinfo

for tdid in $(ls *)

do

    if [[ $tdid == *\_* ]]; then

        t_d=$(echo $tdid | cut -d \_ -f 2 | cut -d \. -f 1)

        if [[ $t_d == $max_date || $t_d > $max_date ]]; then

            echo " need copy date : "$t_d

            echo " need copy tdid : "$tdid

            # 检查tdid是否存在

#            hadoop fs -test -e jiaojiao/tdid/$tdid

#            if [[ $? == 0 ]]; then

#                echo " tdid is already exist,remove it first "

#                hadoop fs -rm jiaojiao/tdid/$tdid

#                hadoop fs -put $tdid jiaojiao/tdid

#            else

#                echo " start copy "

#                hadoop fs -put $tdid jiaojiao/tdid

#            fi

        elif [[ $t_d < $remove_date ]]; then

            echo " remove tdid : "$tdid

            rm $tdid

        fi

    fi

done

#echo " =============== start remove hdfs tdid ===============  "

#for h_tdid in $(hadoop fs -ls jiaojiao/tdid | awk '{print $8}')

#do

#    if [[ $h_tdid == *\_* ]]; then

#        h_date=$(echo $h_tdid | cut -d \_ -f 2 | cut -d \. -f 1)

#        echo $h_date

#        echo $h_tdid

#    fi

#done

Linux备份-删除指定日期内文件的更多相关文章

  1. Window Linux下实现指定目录内文件变更的监控方法

    转自:http://qbaok.blog.163.com/blog/static/10129265201112302014782/ 对于监控指定目录内文件变更,window 系统提供了两个未公开API ...

  2. Linux下查找指定日期的文件

    一.背景 Linux服务器的一个目录里,每天产生海量的文件.为了防止磁盘被写满. 决定每天删除部分老文件.OK,问题来了,如何过滤出指定日期的文件? 二.强大的Linux 一行代码搞定: ls --f ...

  3. 【Linux】linux中删除指定日期之前的文件

    要删除系统中就的备份文件,就需要使用命令了: #find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} \; 假如在一个目录中保留最近30 ...

  4. centos6.5下oracle自动备份删除指定天数的文件

    第一步先做一个备份 #!/bin/sh export ORACLE_BASE=/home/oracle/app export ORACLE_HOME=/dbhome_1 export ORACLE_S ...

  5. Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

    说明:  1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...

  6. python 指定日期图片文件删除

    手机使用python操作图片文件 起因 前几天去国图拍了一本书,一本心理学方面的书,也许你问我为什么不去买一本,或者去网上找pdf. 其实吧,关于心理学方面的书可以说在市面上一抓就是一堆,至于拍这本书 ...

  7. Linux下删除空文件,删除指定大小的文件

    Linux下批量删除空文件(大小等于0的文件)的方法: find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还可以删除指 ...

  8. 利用任务计划自动删除指定日期的SQLServer备份文件

    利用任务计划自动删除指定日期的SQLServer备份文件 命令FORFILES [/P pathname] [/M searchmask] [/S]         [/C command] [/D ...

  9. linux下查找指定后缀的文件

    1.linux下查找指定后缀的文件 例如查找当前目录下的所有后缀名时.c或.h的文件 find  .  -type f -regex  ".*\.\(c\|h\)"

随机推荐

  1. Kruskal HDOJ 4313 Matrix

    题目传送门 题意:如何花最小的代价使得一棵树划分开且不含同类节点 分析:当一条边连接的左右集合同类点小于等于1,那么不用删除,将两个集合合并,要求最小代价,那么贪心思想将权值降序排序,删除后剩下的就是 ...

  2. Nuget 自定义配置(官网)

    <?xml version="1.0" encoding="utf-8"?> <configuration> <config> ...

  3. SpringCloud+MyBatis+Redis整合—— 超详细实例(二)

    2.SpringCloud+MyBatis+Redis redis①是一种nosql数据库,以键值对<key,value>的形式存储数据,其速度相比于MySQL之类的数据库,相当于内存读写 ...

  4. 增大PHP允许上传的文件大小;解决POST Content-Length exceeds the limit

    在php.ini中: upload_max_filesize = 1000M ;1GB post_max_size = 1000M 然后重启apache 参考链接

  5. 常用linux命令大全 转载自:https://www.cnblogs.com/laov/p/3541414.html(大牛笔记)

    Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统.基于Linux有多个版本的衍生.RedHat.Ubuntu.Debian 安装VMware或VirtualBox虚拟机.具体安 ...

  6. 希尔排序法及其js实现

    希尔(Shell)排序又称为缩小增量排序,它是一种插入排序.它是直接插入排序算法的加强版. 希尔增量: 希尔增量是指希尔提出了一种冲破二次时间屏障的算法. Donald Shell 提出了一种冲破二次 ...

  7. 机器学习-牛顿方法&指数分布族&GLM

    本节内容 牛顿方法 指数分布族 广义线性模型 之前学习了梯度下降方法,关于梯度下降(gradient descent),这里简单的回顾下[参考感知机学习部分提到的梯度下降(gradient desce ...

  8. R Programming week1-Subsetting

    Subsetting There are a number of operators that can be used to extract subsets of R objects. [ alway ...

  9. this常用的用法

    1.函数作为对象的方法时,this指的是该对象: var obj ={ name:"bob", age:25, getName:function(){ console.log(th ...

  10. 1、QQ装机部落---腾讯软件

    亲,赚钱快人一步,我给你推荐QQ装机部落!大品牌,口碑好,知名软件,绿色无毒,每天结算,回报高!到这里注册:http://zjbl.qq.com/#/?invid=476058088 返利网邀请码立即 ...