find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。
    例如,在一个目录中保留最近7天的文件,7天前的文件自动删除。
    find . -mtime +7 -type f -name .mail_[12] -exec rm -rf {} \;
    说明:
    . –设置查找的目录;
    -mtime +7 –设置时间为7天前;-mtime -7 表示7天之内;-mtime 7 表示7天前的那一天;-mtime 0 表示1天之内;
    -type f –设置查找的类型为文件,这个参数一定要有,目录和其他字节啥的不要管;
    -name
    .mail[12] –设置文件名称中包含mail_1或者mail_2;
    -exec把find到的文件名作为参数传递给后面的命令行,代替{}的部分,-exec rm -f –查找完毕后执行删除操作。-exec后便跟的命令行,必须用“ \;”结束。
    你可能会在其他地方看到与 -exec rm {} \; 不同的删除方式 xargs rm -rf,两者都可以把find命令查找到的结果删除,其区别简单的说是前者是把find发现的结果一次性传给exec选项,这样当文件数量较多的时候,就可能会出现“参数太多”之类的错误,相比较而言,后者就可以避免这个错误,因为xargs命令会分批次的处理结果。
    将此命令写入crontab后即可自动完成查找并删除的工作了。
    另外,说明一下 find -mtime +N/-N/N 的时间算法:
    以当前时间点开始算起,
    +表示往左,从该时间点开始再继续往更早推,可以称作xx以外;
    -表示往右,从该时间点算起往后的时间推,可以称作xx以内;
    没有加减号表示据此此前第N天。
    一天是指当前系统时间算起的,向前减24小时。
    对于 find . -mtime N 实际上你应该这样理解:N 24
    +1 表示 1
    24 +24小时以外;
    +0 表示 0 24 +24小时以外;
    1 表示 1
    24 + 24 到 24 之间;
    0 表示 0 24 + 24 到 0 之间;
    -1 表示 0
    24 +24 内,甚至为未来时间…
    可以用数学公式来体现:
    +n — n天以前的文件
    ((n+1)24h, -∞)
    n — 前n天的文件
    (0, n
    24h)
    -n — 天以内的文件
    [n24h,(n+1)24h]
    图释:
    image.png
    更多用法:
    find . -amin -10 # 查找在系统中最后10分钟访问的文件
    find . -atime -2 # 查找在系统中最后48小时访问的文件
    find . -empty # 查找在系统中为空的文件或者文件夹
    find . -group cat # 查找在系统中属于 groupcat的文件
    find . -mmin -5 # 查找在系统中最后5分钟里修改过的文件
    find . -mtime -1 #查找在系统中最后24小时里修改过的文件,结果和 find . -mtime 0 一样
    find . -nouser #查找在系统中属于作废用户的文件
    find . -user fred #查找在系统中属于FRED这个用户的文件
    最后,给个示例。
    1、编写清理日志脚本clear.sh
    #!/bin/sh
    find . -mtime +6 -name “.log” -exec rm {} \;
    find /opt/bak -mtime +6 -name “.dmp” -exec rm {} \;
    2、给脚本授权
    chmod +x clear.sh
    3、加入定时执行任务
    vi /etc/crontab
    在最后加入:
    00 2 * root /opt/sh/clear.sh
    4、重启crontab服务
    service crond restart
    注:
    实际执行前,请先自行测试是否有误!例如:
    find . -type f -mtime +5 | xargs ls -l —time-style=’+%Y-%m-%d’
    或者
    find . -type f -mtime +5 -exec ls -l —time-style=’+%Y-%m-%d’ {} \;
    切记 –time-style要和 -l 选项一起使用。格式可以修改,比如’+%Y-%m-%d’ 只显示日期。更简单的方法是:ls -l –full-time


    删除linux home 目录下180天以前的文件
    find /home -mtime +180 -type f | xargs /bin/rm -rf
    删除当前目录下90天之前的所有xlsx文件
    find . -mtime +90 -type f -name .xlsx | xargs /bin/rm -rf
    find . -mtime +10 -type f -name
    .tmp | xargs /bin/rm -rf