专栏首页运维笔记批量清理某目录下的文件或移除某目录下的文件

批量清理某目录下的文件或移除某目录下的文件

#!/bin/bash 
#author: QingFeng
#qq: 530035210
#blog: https://my.oschina.net/pwd/blog 
#批量清理某目录下的文件或移除某目录下的文件
#缺省的配置如下

#basedir=/data/db/renewal/snapshots   #执行目录
#mvdir=/data/move/$(date "+%Y%m%d")
#clear_before_days=90            #清理的时间,120代表120天前的数据  
#file_key="snapshot"             #清理文件包含关键字
logdir=/data/log/clear           #日志路径
log=$logdir/clear.log            #日志文件 
is_font=1                #终端是否打印日志: 1打印 0不打印 
is_log=0                 #是否记录日志: 1记录 0不记录
 
datef(){
date "+%Y-%m-%d %H:%M:%S"
}

print_log(){
if [[ $is_log -eq 1  ]];then
[[ -d $logdir ]] || mkdir -p $logdir
echo "[ $(datef) ] $1" >> $log
fi
if [[ $is_font -eq 1  ]];then
echo "[ $(datef) ] $1"
fi
}

check_dir(){
if [[ ! -d $basedir  ]];then
print_log "[ $(datef) ] 需要清理的目录不存在: $basedir"
exit
fi
}
 

static_sizes(){
size=$(du -sh $basedir |awk '{print $1}')
print_log  "现在该目录[$basedir]的大小为: $size"
} 

static_files(){
if [[ $file_key = "all"  ]];then
file_num=$(find  $basedir   -mtime +$clear_before_days  -type f |wc -l)

if [[ $file_num -eq 0  ]];then
print_log  "$basedir目录下:现在$clear_before_days天以前的文件:总共文件为0个,退出清理/移除动作"
exit
else
print_log  "$basedir目录下:现在$clear_before_days天以前的文件有:$file_num个 "
fi

else
file_num=$(find  $basedir   -mtime +$clear_before_days  -type f  -name "$file_key*"  |wc -l)
if [[ $file_num -eq 0  ]];then
print_log  "$basedir目录下:现在含有关键字:$file_key以及$clear_before_days天以前的文件为0个,退出清理/移除动作"
exit
else
print_log  "$basedir目录下:现在含有关键字:$file_key以及$clear_before_days天以前的文件有:$file_num个 "
fi
fi

}
 
rm_files(){
if [[ $file_key == "all"  ]];then
find  $basedir   -mtime +$clear_before_days  -type f   -exec rm {} \;

if [[ $? -eq 0  ]];then
print_log  "$basedir目录下:$clear_before_days天以前的文件删除成功."
else
print_log  "$basedir目录下:$clear_before_days天以前的文件删除失败."
fi

else
find  $basedir   -mtime +$clear_before_days  -type f  -name "$file_key*" -exec rm {} \;
if [[ $? -eq 0  ]];then
print_log  "$basedir目录下:现在含有关键字:$file_key以及$clear_before_days天以前的文件删除成功."
else 
print_log  "$basedir目录下:现在含有关键字:$file_key以及$clear_before_days天以前的文件删除失败."
fi 

fi
}

mv_files(){
[[ -d $mvdir ]] || mkdir -p $mvdir
if [[ $file_key == "all"  ]];then
find  $basedir   -mtime +$clear_before_days  -type f   -exec mv {} $mvdir \;
if [[ $? -eq 0  ]];then
print_log  "$basedir目录下:$clear_before_days天以前的文件move成功."
else
print_log  "$basedir目录下:$clear_before_days天以前的文件move失败."
fi

else
find  $basedir   -mtime +$clear_before_days  -type f  -name "$file_key*" -exec mv {} $mvdir \;

if [[ $? -eq 0  ]];then
print_log  "$basedir目录下:目前含有关键字:$file_key以及$clear_before_days天以前的文件move成功."
else
print_log  "$basedir目录下:目前含有关键字:$file_key以及$clear_before_days天以前的文件move失败."
fi

fi
} 

#static_sizes
#statics_total
#static_files 
#rm_files
#mv_files
#statics_total
if [[  "$1" != ""  ]];then
firt_args=$1
else
echo -e "
 批量清理某目录下的文件或移除某目录下的文件
 用法示例"
echo -e  "
clean.class.sh:
    ./clean.class.sh  delete  要删除文件的所在目录  要删除文件的关键词 要删除多少天以前的文件
    ./clean.class.sh  move    要移除文件的所在目录  要移除文件的关键词 要移除多少天以前的文件  移除的目标目录
exp:
    ./clean.class.sh  delete  /data/db/renewal/snapshots/   snapshot  120 
    ./clean.class.sh  move   /data/db/renewal/snapshots/    snapshot  120  /data/move
tips:
    直接删除/移动所有文件示例如下:
    ./clean.class.sh  delete  /data/db/renewal/snapshots/   all  120
    ./clean.class.sh  move   /data/db/renewal/snapshots/    all  120  /data/move
"
exit
fi 

if [[ $firt_args != "delete"    ]];then
if [[ $firt_args != "move"   ]];then
print_log  "第一个参数,只能是move或delete."
exit
fi
fi

if [[ $2 != ""  ]];then
basedir=$2
check_dir
if [[ $2 = "/"  ]];then
print_log  "第二个参数[执行目录],不能选择根目录"
exit
fi 

else
print_log  "第二个参数[执行目录],不能为空"
exit
fi 

if [[ $3 != ""  ]];then
file_key=$3
else
print_log  "第三个参数[关键词],不能为空"
exit
fi

if [[ $4 != ""  ]];then
clear_before_days=$4
else
print_log  "第四个参数[天数],不能为空"
exit
fi

if [[ $firt_args = "move"    ]];then
if [[ $5 != ""  ]];then
mvdir=$5
if [[ ! -d  $mvdir   ]];then
echo "[ $(datef) ] 要移除文件的目的目录不存在: $basedir"
exit
fi 
else
print_log  "第五个参数[目的目录],不能为空"
exit
fi

static_sizes
static_files
mv_files
static_sizes
fi

if [[ $firt_args = "delete"    ]];then
static_sizes
static_files 
rm_files
static_sizes
fi

执行结果:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 监控日志文件的md5值/更新时间,如果N分钟后无变化则重启应用

    明哥的运维笔记
  • 检测含有关键字的文件的总大小

    明哥的运维笔记
  • 自动监控url是否可用,如不可用则重启应用,并做相应的报警策略。

    明哥的运维笔记
  • chipBase:转录调控数据库

    转录调控是生命活动中重要的调控机制,通过chip_seq数据,我们可以得到转录因子或者组蛋白修饰和基因之间的调控关系。chipBase数据库收集了来自10个物种...

    生信修炼手册
  • Resin4.0+ 单个服务配置多个实例

    从项目开始选择Resin作为线上服务器开始,一直表现不俗,通常我们单个Resin启动一个Server即可,但是碰到在这个服务器上还需要同时启动另外几个Serve...

    哎_小羊
  • 时间复杂度的计算-数据结构

    汐楓
  • Winpcap基础代码

    Winpcap基础代码     使用Winpcap进行网络数据的截获和发送都需要的一段代码: #include<PCAP.H> #pragma comment(...

    Florian
  • 【安富莱二代示波器教程】第1章 示波器基础知识

    本章的内容整理自网络,主要讲解示波器的基础知识。如果初学的话非常有必要对这部分知识有一个了解。因为示波器是硬件调试必不可少的设备。

    armfly
  • 为什么程序员总是发现不了自己的Bug?

    程序员在普通人的印象里是一份严(ku)谨(bi)的职业,也是一个被搞怪吐槽乐此不疲的职业,程序员们面对复杂的代码敲打电脑时连眉头都不会皱一下,但是有一个词却是他...

    老九君
  • 无来源监测,如何知道有多少ios用户看到朋友圈转发的页面?

    大家知道,如果在网站页面url后添加来源参数再转发到朋友圈,我们可以轻易地在网站监测工具里通过过滤(细分)看到有多少用户是使用苹果手机通过朋友圈进入你的网站。(...

    iCDO互联网数据官

扫码关注云+社区

领取腾讯云代金券