#!/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. 【洛谷3343_BZOJ3925】[ZJOI2015]地震后的幻想乡(状压 DP_期望)

    题目: 洛谷 3343 BZOJ 3925 分析: 谁给我说这是个期望概率神题的,明明没太大关系好吧 「提示」里那个结论哪天想起来再问 Jumpmelon 怎么证. 首先,由于开始修路前 \(e_i\ ...

  2. 解题报告:hdu 1556 Color the ball(区间修改,单点查询)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N ...

  3. 使用Navicat迁移MySQL数据至Oracle时大小写原因报“表或视图不存在”问题处理

    使用Navicat提供的数据传输工具将JEECMSv9的MySQL的数据迁移至Oracle数据库,数据迁移成功表都存在,但是在程序启动时提示表或视图不存在. Caused by: java.sql.S ...

  4. 204 Count Primes 计数质数

    计算所有小于非负整数 n 的质数数量. 详见:https://leetcode.com/problems/count-primes/description/ Java实现: 埃拉托斯特尼筛法:从2开始 ...

  5. spark调试环境搭建

    到目前为止,基于RDD的spark streamming实时应用和离线应用(主要解析日志)已经写了一些,但是对spark的了解还是很少,所以决心花点精力,对spark做一些比较深入的了解和学习.参照之 ...

  6. vue-webpack所构建好的项目中增加Eslint

    首先在package.json中配置eslint模块: 在终端运行命令:npm install 然后在build文件夹中web pack.base.conf.js配置eslint 接下来在在项目中新建 ...

  7. 30款jQuery常用网页焦点图banner图片切换

    1.jquery 图片滚动特效制作 slide 图片类似窗帘式图片滚动 查看演示 2.jquery幻灯片插件带滚动条的圆形立体图片旋转滚动 查看演示 3.jQuery图片层叠旋转类似洗牌翻转图片幻灯片 ...

  8. iOS Programming UISplitViewController

    iOS Programming UISplitViewController  The iPad, on the other hand, has plenty of screen space to pr ...

  9. 唤醒键盘时取消对特定类的position:fixed定位

    /* 唤起键盘时取消对特定类的position:fixed定位 */ var windheight = $(window).height(); /*未唤起键盘时当前窗口高度*/ $(window).r ...

  10. MSSQL 重新生成索引,重新组织索引

    > 5% 且 < = 30% ALTER INDEX REORGANIZE > 30% ALTER INDEX REBUILD WITH (ONLINE = ON)* * 重新生成索 ...