LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1524|回复: 9

定时删除文件

[复制链接]
发表于 2005-7-27 13:16:36 | 显示全部楼层 |阅读模式
我想保留7天之内的文件,其他文件删除,文件名是根据日期来定的,比如2005-07-27,而且在当天可以创建明天或者后天的文件,比如2005-07-28,应该怎么实现?
发表于 2005-7-27 17:03:55 | 显示全部楼层
  1. #!/bin/sh
  2. mkdir -p /tmp/7day
  3. for j in path/*
  4. do
  5.         for ((i=1;i<8;i++))
  6.         do
  7.                 if [ `basename $j` = `date +%Y-%m-%d -d "-$((i-1)) day"` ]
  8.                 then
  9.                         mv $j /tmp/7day
  10.                 fi
  11.         done
  12. done
  13. rm -f path/*
  14. mv /tmp/7day/* path/ && rm -rf /tmp/7day
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-7-27 21:54:56 | 显示全部楼层
crontab  呵呵,为什么要以文件名字来决定日期呢?
touch一个文件,然后用 find 。。。。 - exec 。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-27 22:00:02 | 显示全部楼层
Post by abigant
crontab  呵呵,为什么要以文件名字来决定日期呢?
touch一个文件,然后用 find 。。。。 - exec 。。。


因为文件名是软件自动创建的,不是人为的。用FIND命令只能删除按创建时间的文件。也就是说过个七天,2005-07-28这个文件不能被删除。
回复 支持 反对

使用道具 举报

发表于 2005-7-27 23:17:55 | 显示全部楼层
因为文件名是软件自动创建的,不是人为的。用FIND命令只能删除按创建时间的文件。也就是说过个七天,2005-07-28这个文件不能被删除。
  1. #!/bin/sh
  2. mkdir -p /tmp/7day
  3. for j in path/*
  4. do
  5.         for ((i=-7;i<3;i++))
  6.         do
  7.                 if [ `basename $j` = `date +%Y-%m-%d -d "$i day"` ]
  8.                 then
  9.                         mv $j /tmp/7day
  10.                 fi
  11.         done
  12. done
  13. rm -f path/*
  14. mv /tmp/7day/* path/ && rm -rf /tmp/7day
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-29 09:03:09 | 显示全部楼层
Post by upandup
  1. #!/bin/sh
  2. mkdir -p /tmp/7day
  3. for j in path/*
  4. do
  5.         for ((i=-7;i<3;i++))
  6.         do
  7.                 if [ `basename $j` = `date +%Y-%m-%d -d "$i day"` ]
  8.                 then
  9.                         mv $j /tmp/7day
  10.                 fi
  11.         done
  12. done
  13. rm -f path/*
  14. mv /tmp/7day/* path/ && rm -rf /tmp/7day
复制代码


我试过了,不成功。为什么/tmp/7day里面是空的?
回复 支持 反对

使用道具 举报

发表于 2005-7-29 21:31:11 | 显示全部楼层
Post by yu330
我试过了,不成功。为什么/tmp/7day里面是空的?

/tmp/7day是临时目录,你看它干撒子。这个脚本就是保持你原来放文件的目录里有前7天和明天后天2天的文件。
在我这里没有出错。
你拿去就用,别人写的东西意思你懂了吗。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-1 11:55:36 | 显示全部楼层
按照upandup兄的思路,代码如下:
#!/bin/bash
mkdir -p /tmp/days
for i in `ls /root/bb/path`
do
  for k in -7 -6 -5 -4 -3 -2 -1 +0 +1 +2 +3 +4
    do
     a=`basename $i`
     b=`date +%Y-%m-%d -d "$k day" |awk -F- '{print $2"-"$1"-"$3}' |sed s/^0//g |awk -F- '{print $2"-"$1"-"$3}'| awk -F- '{print $3"-"$2"-"$1}' |sed s/^0//g |awk -F- '{print $3"-"$2"-"$1}'`     
       if [ "$a" = "$b" ]
        then
          echo $i
          mv -f /root/bb/path/$i /tmp/days/$1
     fi
    done
done
rm -rf /root/bb/path/*
mv /tmp/days/* /root/bb/path/
rm -rf /tmp/days

日期格式:
比如:2005-8-1。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-1 11:56:02 | 显示全部楼层
按照upandup兄的思路,代码如下:
#!/bin/bash
mkdir -p /tmp/days
for i in `ls /root/bb/path`
do
  for k in -7 -6 -5 -4 -3 -2 -1 +0 +1 +2 +3 +4
    do
     a=`basename $i`
     b=`date +%Y-%m-%d -d "$k day" |awk -F- '{print $2"-"$1"-"$3}' |sed s/^0//g |awk -F- '{print $2"-"$1"-"$3}'| awk -F- '{print $3"-"$2"-"$1}' |sed s/^0//g |awk -F- '{print $3"-"$2"-"$1}'`     
       if [ "$a" = "$b" ]
        then
          #echo $i
          mv -f /root/bb/path/$i /tmp/days/$1
     fi
    done
done
rm -rf /root/bb/path/*
mv /tmp/days/* /root/bb/path/
rm -rf /tmp/days

日期格式:
比如:2005-8-1。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-1 11:59:04 | 显示全部楼层
不好意思,粘贴到帖子里,格式不是很美观。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表