欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Linux自动删除n天前日志 有大用

linux是一个很能自动产生文件的系统,日志、邮件、备份等。虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情。不用你去每天惦记着是否需要清理日志,不用每天收到硬盘空间不足的报警短信,想好好休息的话,让我们把这个事情交给机器定时执行吧。

 

1.删除文件命令:

find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;

实例命令:

find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;

说明:

将/opt/soft/log/目录下所有30天前带".log"的文件删除。具体参数说明如下:

find:linux的查找命令,用户查找指定条件的文件

/opt/soft/log/:想要进行清理的任意目录

-mtime:标准语句写法

+30:查找30天前的文件,这里用数字代表天数

"*.log":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三

-exec:固定写法

rm -rf:强制删除文件,包括目录

{} \; :固定写法,一对大括号+空格+\+;

 

2.计划任务:

若嫌每次手动执行语句太麻烦,可以将这小语句写到一个可执行shell脚本文件中,再设置cron调度执行,那就可以让系统自动去清理相关文件。

 

2.1创建shell:

touch /opt/soft/bin/auto-del-30-days-ago-log.sh

chmod +x auto-del-30-days-ago-log.sh

新建一个可执行文件auto-del-30-days-ago-log.sh并分配可运行权限

 

2.2编辑shell脚本:

vi auto-del-30-days-ago-log.sh

编辑auto-del-30-days-ago-log.sh文件如下:

 

#!/bin/sh

find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;

 

ok,保存退出(:wq)

 

2.3计划任务:

#crontab -e

将auto-del-30-days-ago-log.sh执行脚本加入到系统计划任务,到点自动执行

输入:

10 0 * * * /opt/soft/log/auto-del-7-days-ago-log.sh >/dev/null 2>&1

这里的设置是每天凌晨0点10分执行auto-del-7-days-ago-log.sh文件进行数据清理任务了。

完成以上三步,你就再也不每天惦记是否硬盘空间满了,该清理日志文件了,再也不会受到服务器硬盘空间不足的报警信息了,放心的去看书喝咖啡去吧!

来自  http://www.cnblogs.com/peida/archive/2013/03/25/2980121.html


Linux计划任务,自动删除n天前的旧文件

       linux是一个很能自动产生文件的系统,日志、邮件、备份等。虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,但需求总是多方面的嘛~我就觉得让系统定时清理一些不需要的文件很有一种爽快的感觉,嘿嘿~~

语句写法:
find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;

例1:
find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \;
将/usr/local/backups目录下所有10天前带"."的文件删除

find:linux的查找命令,用户查找指定条件的文件
/usr/local/backups:想要进行清理的任意目录
-mtime:标准语句写法
+10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件
"*.*":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三
-exec:固定写法
rm -rf:强制删除文件,包括目录
{} \; :固定写法,一对大括号+空格+\+;


若嫌每次手动执行语句太麻烦,可以将这小语句写到一个可执行文件中,再设置cron调度执行,那就可以让系统自动去清理相关文件。

例2:
1.#touch /usr/local/bin/clear
#chmod 777 clear
新建一个可执行文件clear

2.vi clear
编辑clear文件如下:

#!/bin/sh

find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \;

ok,保存退出

3.#crontab -e
将clear文件加入到系统计划任务,到点自动执行

输入:
* 2 * * */usr/local/bin/clear
这里的设置是每天凌晨2点执行clear文件进行数据清理,可以研究一下cron,制定自己需要的计划任务

来自 http://yaksayoo.blog.51cto.com/510938/155237

本文出自 “精诚所至 金石为开” 博客,请务必保留此出处http://yaksayoo.blog.51cto.com/510938/155237


 cron相当于* * * * * 脚本名,等于每分钟执行一次

linux下用shell删除三天前或者三天内的文件

find / -amin -30 -ls # 查找在系统中最后30分钟访问的文件

find / -atime -2 -ls # 查找在系统中最后48小时访问的文件
find / -mmin -10 -ls # 查找在系统中最后10分钟里修改过的文件
find / -mtime -1 -ls # 查找在系统中最后24小时里修改过的文件
find / -cmin -10 -ls # 查找在系统中最后10分钟里被改变状态的文件
find / -ctime -1 -ls # 查找在系统中最后24小时里被改变状态的文件

# 删除tmp目录下3天前所有子文件,如果不带*,则会干掉此非空目录
/usr/bin/find /data/htdocs/test.cn/data/tmp/* -mtime +3 -ls

[正常情况下:atime 与 mtime所找到的文件个数是相等的]

shell脚本举例:

文件名: test.sh

内容如下:

# 删除三天前,遗留的dump文件

day=$(/bin/date +%Y-%m-%d);
count=`/usr/bin/find /data/htdocs/test.cn/data/tmp/* -mtime +3 | wc -l`;
/usr/bin/find /data/htdocs/test.cn/data/tmp/* -mtime +3 -delete;
echo $day – $count;

#删除10天前的所有文件

find /tmp/* -type f -mtime +10 -exec rm {} \;

#查找10天前的所有文件

find /tmp/* -type f -mtime +10 -exec ls -l {} \;

可以配合脚本命令,定时自动删除安卓QQ的15天前的图片缓存

find /sdcard/tencent/*/*/.photo/* -type f -mtime +15 -exec rm {} \;

 

转载请注明:手记 » linux下用shell删除三天前或者三天内的文件


来自 http://www.isucc.me/199.html


 

find . -mtime +15 -type f -exec rm -fr {} \;
 


shell脚本删除N天前的文件夹-----附linux和mac上date命令的不同
背景: 

每日构建的东西,按日期放到不同的文件夹里。如今天的构建放到2015-06-01里,明天的就放到2015-06-02里,依次类推。时间久了,需要一个脚本删除N天前的文件夹。(本例中N=7,即删除一周前的构建)。 
下面直接上代码,linux版:

#! /bin/bash
historyDir=~/test/
today=$(date +%Y-%m-%d)
echo "---------today is $today-----------"
tt=`date -d last-week +%Y-%m-%d`
echo "next is to delete release before $tt"
tt1=`date -d $tt +%s`  #小于此数值的文件夹删掉
#echo $tt1 
for file in ${historyDir}*
do
    if test -d $file
        then
        name=`basename $file`
        #echo $name
        curr=`date -d $name +%s`
        if [ $curr -le $tt1 ]
            then
                echo " delete $name-------"
                rm -rf ${historyDir}${name}
        fi
    fi
done

注意事项: 
1,historyDir=~/test/后面一定要带/,否则在后面的遍历文件夹时for file in ${historyDir}*会对应不上。

2,在linux下通过today=$(date +%Y-%m-%d)获得格式为2015-06-01类型的日期,通过

tt1=`date -d $tt +%s`

得到整形的时间戳。当然也可以在获得时间的时候就用$(date +%s)这样直接得到的就是时间戳,不用再转换了,但是日期是默认的年月日小时分秒的格式转换的时间戳。 
PS:MAC下不行。

3,linux里通过date -d last-week +%Y-%m-%d来获得一周前的日期。 
PS:MAC下没行。 
4,通过 if test -d $file来判断文件夹是否存在,-f是判断文件是否存在。

name=`basename $file`

这句话获得文件夹的名字,之后是将名字(也就是日期)转为时间戳比较。

MAC上的代码

#! /bin/bash
historyDir=~/test/
today=$(date +%Y-%m-%d)
echo "---------today is $today-----------"
today1=`date -j -f %Y-%m-%d $today +%s`
#echo "today1=$today1"

#求一周前的时间
tt=$(date -v -7d +%Y-%m-%d)
echo "next is to delete release before $tt"
tt1=`date -j -f %Y-%m-%d $tt +%s`   #linux上可以这样`date -d $tt +%s`  #小于此数值的文件夹删掉
#echo $tt1 
for file in ${historyDir}*
do 
    if test -d $file
    then
    name=`basename $file`
    echo $name
    curr=`date -j -f %Y-%m-%d $name +%s`
    if [ $curr -le $tt1 ]
        then
            echo " delete $name"
            rm -rf ${historyDir}${name}
    fi      
    fi
done
echo "--------------end---------------"

跟linux上不同之处有二: 

1,将字符串的时间转为整数的时间戳时,mac上要这样:

today1=`date -j -f %Y-%m-%d $today +%s`


2,获得7天之前的日期mac上要这样:

tt=$(date -v -7d +%Y-%m-%d)

相关链接:

1,http://willzh.iteye.com/blog/459808 
2,http://apple.stackexchange.com/questions/115830/shell-script-for-yesterdays-date


来自 http://blog.csdn.net/yanzi1225627/article/details/46327467
普通分类: