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

#!/bin/bash 
#批量清理某目录下的文件或移除某目录下的文件
basedir=/data/db/renewal/snapshots   #执行目录
clear_before_days=95 		     #清理的时间,100代表100天前的数据
logdir=/data/log/clear		     #日志路径
log=$logdir/clear.log		     #日志文件
file_key="snapshot" 		     #清理文件包含关键字
is_font=1			     #终端是否打印日志: 1打印 0不打印
is_log=1			     #是否记录日志: 1记录 0不记录

datef(){
date "+%Y-%m-%d %H:%M:%S"
}

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

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

statics_total(){
file_num=$(find  $basedir     -type f  -name "$file_key*"  |wc -l)
echo_log "$basedir目录:目前含有关键字:$file_key的文件总共有:$file_num个 "
print_log  "$basedir目录:目前含有关键字:$file_key的文件总共有:$file_num个 "
}

static_files(){
file_num=$(find  $basedir   -mtime +$clear_before_days  -type f  -name "$file_key*"  |wc -l)
echo_log "$basedir目录:目前含有关键字:$file_key以及$clear_before_days天以前的文件有:$file_num个 "
print_log  "$basedir目录:目前含有关键字:$file_key以及$clear_before_days天以前的文件有:$file_num个 "
}

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

statics_total
static_files 
rm_files
statics_total

执行结果:

时间: 2024-08-26 08:24:38

#批量清理某目录下的文件或移除某目录下的文件的相关文章

apk安装时把程序附带文件拷贝到手机指定目录下

项目已搞定,今天把.apk文件弄到另外一台非调试手机上用,发现一个问题.因为要画图,所以绘图的点的数据保存在一个.txt的文本文件中,上次直接把它用usb传到指定文件夹下的,但是明显不科学,因为用户下载了你的.apk文件,你却告诉他,还要把这个文本文件拷贝到指定的文件夹下,所以,我就要解决这个问题,就是把文本文件打包在apk文件中,安装.apk时就让创建一个程序文件夹,然后把文本文件拷贝到这个目录文件夹里,用户运行程序,就可以绘图,不用再让他拷贝一份绘图的点的坐标的数据.同理,其实我这里还有设计

JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件

package ioTest.io3; import java.io.File; /* * 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件 . * 并将文件夹和文件名称打印在控制台上面.并且要显示文件目录的层级 * 注:运用了递归的算法. */ public class FileDemo3 { public static void main(String[] args) { File dir=new File("F:\\黑马学习日程\\"); //File dir=new Fi

Linux批量清理多个文件内容而不删除文件

清理单个文件,可以这样:echo > myLog.log 但是,如果我要清理一堆文件,比如在/logs目录下面的所有以.log结尾的文件的内容,而不删除文件,该如何操作呢? 我一开始的语句是这样的: find /logs -name "*.log" -exec echo > {} \; 但是,运行的结果是新建了一个名为“{}”的文件,并没有执行清理文件内容的操作. 我询问了大神之后,我的语句是这样的: for i in `find . -name "*.log&q

Eclipse下无法编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法

1. 确保 project->build automatically 已经被选上. 2. 如果选上了,也不好使, 使用这一招: project->clean..->选第2个clean select project, 勾上start build immediatelly 3.删除现在的项目,提前设置好编译文件输出路径,重新导入源文件,设置eclipse为保存时编译,然后在保存的时候就可以自动编译了 4.如果项目里引了某个不用的jar包,而那个包又被你删了,就会出现不报错但怎么也编译不出来c

Centos下wget下载整个网站,或者目录全部文件

需要下载某个目录下面的所有文件.命令如下 wget -c -r -np -k -L -p www.xxx.org/pub/path/ 在下载时.有用到外部域名的图片或连接.如果需要同时下载就要用-H参数. wget -np -nH -r –span-hosts www.xxx.org/pub/path/ -c 断点续传 -r 递归下载,下载指定网页某一目录下(包括子目录)的所有文件 -nd 递归下载时不创建一层一层的目录,把所有的文件下载到当前目录 -np 递归下载时不搜索上层目录,如wget

C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库

using FtpLib; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading; using

[Android sdcard]eclipse ADT下DDMS视图sdcard(有的是storage目录)中无法导入文件

首先需要说明下,这里说的sdcard的权限并不是指在Android application程序中设置sdcard的权限读 取问题.而是指在DDMS看到的目录下的那个sdcard目录的权限问题. 有时候,当你想在sdcard(或者是storage目录)目录下面导入某个文件时,突然发现sdcard目录没有权限,它的权限状态为(d-------即000).这时候我们需要做的事: 1.如果你没有配置好adb运行环境,在环境配置的path下面将android-sdk-windows\platform-to

企业必考面试题:查找/oldboy目录下所有7天以前的以log结尾的文件移动到/tmp下。

企业必考面试题:查找/oldboy目录下所有7天以前的以log结尾的文件移动到/tmp下. 要求:请给出至少三种实现方法,有能力的朋友试试看! 方法一. [[email protected] oldboy]# mv $(find . -name "*.log" -size +1M -atime +7) /tmp/ 方法二. [[email protected] oldboy]# mv find . -name "*.log" -size +1M -atime +7

编写一个程序,将 d: \ java 目录下的所有.java 文件复制到d: \ jad 目录下,并 将原来文件的扩展名从.java 改为.jad

1.编写一个程序,将 d: \ java 目录下的所有.java 文件复制到d: \ jad 目录下,并 将原来文件的扩展名从.java 改为.jad package copy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; i