2015-05-09 60 views
0

一个cron行动节省了以小时为单位的数据库文件并分配根据年,月,日,时文件名庆典删除文件小于字符串值

/$(date +\%m)/$(date +\%y\%m\%d\%H)_thedb.sql 

这导致存档膨胀,目标是在一个单独的cron动作中保留当天的最后一个文件(即删除所有小于15050923*的文件)。

什么是实现这一目标的有效方法?

+0

如果你说'ls -1rt',列表中的最后一个文件将是最新的。存储它,并删除其余的。 – fedorqui

回答

1

在开始使用复杂的bash字符串替换之前,我建议您尝试去查看文件日期。 find可以帮助你。

例如,要删除的目录中有超过5天的所有文件,你可以尝试这样的事:

find <DIR> -mtime +5 -exec rm {} \; 

现在是否有<DIR>子目录,你可能还需要包括选项-type f将查找限制为文件,并且-maxdepth 1不搜索子目录。

如果你有一个文件,你想删除一切比年纪大了,你可以稍微修改此:

find <DIR> -not -newer <FILE> -not -name <FILE> -exec rm {} \; 

我只是不知道为什么会出现在find没有-older搜索词,它似乎很明显。

Warning:我强烈建议先忽略-exec及其后的所有内容,检查它找到的文件是否全部被删除。

+0

有趣的是,鉴于日期和日历日期可能产生的差异,这是另一个实际问题,这种方法会创造更多的工作。 – Jerome