因为需求原因,要每天定时去删除指定目录下超过5天的文件。
刚开始我想用java,因为本职就是写java的,但是梳理了一下,卧槽java写删除文件居然要那么多(主要是懒).....
于是乎,想到了shell,emmm,这问题来了,自己又不会,也没有学过shell,辣鸡学校出来的大专鸡那也只能自己厚着脸,自己去写,花了一下午百度+实践初成品的代码思路:
#!/bin/bash location="/home/update/*" find $location -type f -mtime+1 | xargs rm -rf find $location -type d -mtime+1 | xargs rm -rf
ps:
location 是设置查找的目录
--mtime +30 是设置时间为30天前
-type f 这周查找的类型为文件
-type d 这周查找的类型为文件夹
N分钟前 -mini +N
然后测试运行也遇到几个问题...
首先就是你在window 上写shell脚本的话,然后上传到linux运行,会报错的-->"-bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory"
度娘解决的办法是运行一下这个命令:
#sed -i 's/\r$//' test.sh
或者vi 脚本,底行模式,输入
set fileformat=unix
具体为什么出现这个错误的话,问题其实很简单,写java也会经常遇到的。
因为在windows下编写shell脚本回车符是\n\r,而linux下的回车符是\n,所以在linux下运行脚本的时候,需要修改下脚本的的编码格式。
然后就是自己遇到一个傻吊问题,可能写java习惯了 a = b,等于之间有空格,shell脚本也不认..
最后修改的代码如下,也感谢我公司shell大神的指导,也让自己入门了shell,哈哈哈哈哈哈....
#!/bin/bash FILE_DRI='/home/update/' #在/home/update/目录中查找更改时间在5日以前的文件并删除它们: # find /home/update/ -type f -mtime +5 -exec rm {} \; for file_pwd in $(find $FILE_DRI -type f -mtime +5); do file_size=$(du -sh $file_pwd | awk '{print $1}') rm -rf $file_pwd >/dev/null 2>&1 if [ ! -f "$file_pwd" ]; then rm_date=`date +"%F %T"` echo "$rm_date | $file_pwd | $file_size 已删除" >> /home/rm.log else rm_date=`date +"%F %T"` echo "$rm_date | $file_pwd | $file_size 删除失败 " >> /home/rm.log fi done
菜鸟的入门shell..记录撸码完毕...
如果需要让他定时的话,linux有自带的定时命令吧?好像是叫crontab定时执行任务命令。