批量清理某目录下的文件或移除某目录下的文件 发表于 2015-01-04 | 分类于 小技巧 | | 阅读次数 | 字数统计 871 | 阅读时长 4 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195#!/bin/bash #author: QingFeng#qq: 530035210#blog: http://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 $logdirecho "[ $(datef) ] $1" >> $logfiif [[ $is_font -eq 1 ]];thenecho "[ $(datef) ] $1"fi}check_dir(){if [[ ! -d $basedir ]];thenprint_log "[ $(datef) ] 需要清理的目录不存在: $basedir"exitfi} static_sizes(){size=$(du -sh $basedir |awk '{print $1}')print_log "现在该目录[$basedir]的大小为: $size"} static_files(){if [[ $file_key = "all" ]];thenfile_num=$(find $basedir -mtime +$clear_before_days -type f |wc -l)if [[ $file_num -eq 0 ]];thenprint_log "$basedir目录下:现在$clear_before_days天以前的文件:总共文件为0个,退出清理/移除动作"exitelseprint_log "$basedir目录下:现在$clear_before_days天以前的文件有:$file_num个 "fielsefile_num=$(find $basedir -mtime +$clear_before_days -type f -name "$file_key*" |wc -l)if [[ $file_num -eq 0 ]];thenprint_log "$basedir目录下:现在含有关键字:$file_key以及$clear_before_days天以前的文件为0个,退出清理/移除动作"exitelseprint_log "$basedir目录下:现在含有关键字:$file_key以及$clear_before_days天以前的文件有:$file_num个 "fifi} rm_files(){if [[ $file_key == "all" ]];thenfind $basedir -mtime +$clear_before_days -type f -exec rm {} \;if [[ $? -eq 0 ]];thenprint_log "$basedir目录下:$clear_before_days天以前的文件删除成功."elseprint_log "$basedir目录下:$clear_before_days天以前的文件删除失败."fielsefind $basedir -mtime +$clear_before_days -type f -name "$file_key*" -exec rm {} \;if [[ $? -eq 0 ]];thenprint_log "$basedir目录下:现在含有关键字:$file_key以及$clear_before_days天以前的文件删除成功."else print_log "$basedir目录下:现在含有关键字:$file_key以及$clear_before_days天以前的文件删除失败."fi fi}mv_files(){[[ -d $mvdir ]] || mkdir -p $mvdirif [[ $file_key == "all" ]];thenfind $basedir -mtime +$clear_before_days -type f -exec mv {} $mvdir \;if [[ $? -eq 0 ]];thenprint_log "$basedir目录下:$clear_before_days天以前的文件move成功."elseprint_log "$basedir目录下:$clear_before_days天以前的文件move失败."fielsefind $basedir -mtime +$clear_before_days -type f -name "$file_key*" -exec mv {} $mvdir \;if [[ $? -eq 0 ]];thenprint_log "$basedir目录下:目前含有关键字:$file_key以及$clear_before_days天以前的文件move成功."elseprint_log "$basedir目录下:目前含有关键字:$file_key以及$clear_before_days天以前的文件move失败."fifi} #static_sizes#statics_total#static_files #rm_files#mv_files#statics_totalif [[ "$1" != "" ]];thenfirt_args=$1elseecho -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/movetips: 直接删除/移动所有文件示例如下: ./clean.class.sh delete /data/db/renewal/snapshots/ all 120 ./clean.class.sh move /data/db/renewal/snapshots/ all 120 /data/move"exitfi if [[ $firt_args != "delete" ]];thenif [[ $firt_args != "move" ]];thenprint_log "第一个参数,只能是move或delete."exitfifiif [[ $2 != "" ]];thenbasedir=$2check_dirif [[ $2 = "/" ]];thenprint_log "第二个参数[执行目录],不能选择根目录"exitfi elseprint_log "第二个参数[执行目录],不能为空"exitfi if [[ $3 != "" ]];thenfile_key=$3elseprint_log "第三个参数[关键词],不能为空"exitfiif [[ $4 != "" ]];thenclear_before_days=$4elseprint_log "第四个参数[天数],不能为空"exitfiif [[ $firt_args = "move" ]];thenif [[ $5 != "" ]];thenmvdir=$5if [[ ! -d $mvdir ]];thenecho "[ $(datef) ] 要移除文件的目的目录不存在: $basedir"exitfi elseprint_log "第五个参数[目的目录],不能为空"exitfistatic_sizesstatic_filesmv_filesstatic_sizesfiif [[ $firt_args = "delete" ]];thenstatic_sizesstatic_files rm_filesstatic_sizesfi 执行结果: 坚持原创技术分享,您的支持将鼓励我继续创作! 赏 微信打赏