Cron作业 - 删除旧文件,但保留文件从本月的第一天开始

时间:2012-08-30 14:23:55

标签: unix cron

我目前正在运行成功的mysql备份,并且在某些网站上,我正在使用此命令删除7天以前的文件

find  /path/to/file -mtime +7 -exec rm -f {} \;

我想做什么,因为我是偏执狂并且仍然会喜欢一些存档信息,是删除超过31天的文件,但是每个月保留至少一个文件,也许可以保留任何创建的文件在这个月的第一天。

有什么想法吗?

4 个答案:

答案 0 :(得分:0)

您还可以使用xargs编写脚本以包含类似的内容:

find / path / to / files -mtime +7 | xargs -i rm {};

然后将脚本添加到您的cron作业

答案 1 :(得分:0)

grep几乎是正确的,它只有一个空间太多了。这是有效的(至少对我来说,我使用Debian):

rm `find /path/to/file -type f -mtime +7 -exec ls -l {} + | grep -v ' [A-S][a-z][a-z]  1 ' | sed -e 's:.* /path/to/file:/path/to/file:g'`

答案 2 :(得分:0)

您可以使用以下命令创建文件:

SRC_DIR=/home/USB-Drive
DATE=$(/bin/date "+%4Y%2m%2d%2H%2M")
TIME_STAMP=$(/bin/date --date 'now' +%s)
TIME_CAL=$[$TIME_STAMP-2592000+25200] #last day, 25200 is my GMT+7hour 
TIME_LAST=$(/bin/date --date "1970-01-01 $TIME_CAL sec" "+%4Y%2m%2d%2H%2M")
/bin/touch -t ${TIME_LAST} /tmp/lastmonth
/usr/bin/find -P -H ${SRC_DIR}  ! -newer /tmp/lastmonth -type d -exec rm -r {} \;

您可以根据要删除的内容修改上一个命令,在这种情况下,我想删除SRC_DIR中的子文件夹。使用'time attribute'超过一个月前。

答案 3 :(得分:-1)

有点难看,但您可以尝试解析ls -l

的输出
rm `find /path/to/file -type f -mtime +7 -exec ls -l {} + | grep -v ' [A-S][a-z][a-z]  1  ' | sed -e 's:.* /path/to/file:/path/to/file:g'`

或者编写一个脚本来获取列表,然后一次一个地运行rm