一个cron行动节省了以小时为单位的数据库文件并分配根据年,月,日,时文件名庆典删除文件小于字符串值
/$(date +\%m)/$(date +\%y\%m\%d\%H)_thedb.sql
这导致存档膨胀,目标是在一个单独的cron动作中保留当天的最后一个文件(即删除所有小于15050923*
的文件)。
什么是实现这一目标的有效方法?
一个cron行动节省了以小时为单位的数据库文件并分配根据年,月,日,时文件名庆典删除文件小于字符串值
/$(date +\%m)/$(date +\%y\%m\%d\%H)_thedb.sql
这导致存档膨胀,目标是在一个单独的cron动作中保留当天的最后一个文件(即删除所有小于15050923*
的文件)。
什么是实现这一目标的有效方法?
在开始使用复杂的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
及其后的所有内容,检查它找到的文件是否全部被删除。
有趣的是,鉴于日期和日历日期可能产生的差异,这是另一个实际问题,这种方法会创造更多的工作。 – Jerome
如果你说'ls -1rt',列表中的最后一个文件将是最新的。存储它,并删除其余的。 – fedorqui