Linux备份-删除指定日期内文件
#!/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备份-删除指定日期内文件的更多相关文章
- Window Linux下实现指定目录内文件变更的监控方法
转自:http://qbaok.blog.163.com/blog/static/10129265201112302014782/ 对于监控指定目录内文件变更,window 系统提供了两个未公开API ...
- Linux下查找指定日期的文件
一.背景 Linux服务器的一个目录里,每天产生海量的文件.为了防止磁盘被写满. 决定每天删除部分老文件.OK,问题来了,如何过滤出指定日期的文件? 二.强大的Linux 一行代码搞定: ls --f ...
- 【Linux】linux中删除指定日期之前的文件
要删除系统中就的备份文件,就需要使用命令了: #find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} \; 假如在一个目录中保留最近30 ...
- centos6.5下oracle自动备份删除指定天数的文件
第一步先做一个备份 #!/bin/sh export ORACLE_BASE=/home/oracle/app export ORACLE_HOME=/dbhome_1 export ORACLE_S ...
- Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本
说明: 1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...
- python 指定日期图片文件删除
手机使用python操作图片文件 起因 前几天去国图拍了一本书,一本心理学方面的书,也许你问我为什么不去买一本,或者去网上找pdf. 其实吧,关于心理学方面的书可以说在市面上一抓就是一堆,至于拍这本书 ...
- Linux下删除空文件,删除指定大小的文件
Linux下批量删除空文件(大小等于0的文件)的方法: find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还可以删除指 ...
- 利用任务计划自动删除指定日期的SQLServer备份文件
利用任务计划自动删除指定日期的SQLServer备份文件 命令FORFILES [/P pathname] [/M searchmask] [/S] [/C command] [/D ...
- linux下查找指定后缀的文件
1.linux下查找指定后缀的文件 例如查找当前目录下的所有后缀名时.c或.h的文件 find . -type f -regex ".*\.\(c\|h\)"
随机推荐
- greater()和less()的使用
greater和less是头文件<xfunctional>中定义的两个结构.下面看它们 的定义,greater和less都重载了操作符(). // TEMPLATE STRUCT grea ...
- 题解报告:hdu 1406 完数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1406 Problem Description 完数的定义:如果一个大于1的正整数的所有因子之和等于它的 ...
- AJPFX关于多态的应用
要求设计一个方法,要求此方法可以接受A类的任意子类对象,并调用方法,此时,如果不使用对象多态性,那代码肯定会类似如下 class A{ // 定义类A publi ...
- css中border制作各种形状
css利用border制作各种形状的原理如图: 使用border绘制三角形是什么原理?事实上,宽度相等的border是以45度对接的,如下图: 没有了上border如图所示: 再设置border的宽度 ...
- 什么是LambdaExpression,如何转换成Func或Action(2)
序言 在上一篇中,我们认识了什么是表达式树.什么是委托,以及它们的关系.可能是我功力不好,貌似大家都不怎么关注,没有讲解出不同角度的问题. 学习一种新技术,是枯燥的过程,只有在你掌握后并能运用时才能从 ...
- HttpClient 学习整理 (转)
source:http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html HttpClient 是我最近想研究的东西,以前想过的一些应用没能 ...
- “完美”解决微信小程序购物车抛物动画,在连续点击时出现计算错误问题,定时器停不下来。
最近做,微信点餐小程序,遇到添加商品时出现抛物动画,参考借鉴了这位大神的方法 https://www.cnblogs.com/greengage/p/7815842.html 但出现了一个问题,连续点 ...
- 解决 python No migrations to apply 无法生成表
第一步: 删除该app名字下的migrations文件. 第二步: 进入数据库,找到django_migrations的表,删除该app名字的所有记录. delete from django_migr ...
- [Luogu] P4838 P哥破解密码
题目背景 P哥是一个经常丢密码条的男孩子. 在ION 8102赛场上,P哥又弄丢了密码条,笔试满分的他当然知道这可是要扣5分作为惩罚的,于是他开始破解ION Xunil系统的密码. 题目描述 定义一个 ...
- java枚举中常见的7中用法
2016年08月11日 11:14:45 李学凯 原文链接https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的 ...