菜鸟的shell-删除5天前的文件 – 记忆角落

菜鸟的shell-删除5天前的文件

/ 4评 / 3

因为需求原因,要每天定时去删除指定目录下超过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定时执行任务命令。

 


《“菜鸟的shell-删除5天前的文件”》 有 4 条评论

  1. 大致说道:

    你应该换一个Windows下的编辑器了。

发表评论

您的电子邮箱地址不会被公开。