我是linux脚本的新手,以前从未创建过.sh文件。
我需要创建一个脚本,该脚本将删除上个月的所有文件。
我经历了

find /path/to/files* -mtime +5 -exec rm {} \;


但发现没有用处,因为一个月中的天数可能在30 -31天之间变化。
请帮我解决这个问题。谢谢

最佳答案

好吧,首先-您上个月的清除有多重要?我的意思是-如果您在5月1日运行脚本,您是否真的希望从昨晚删除这些文件?

在大多数情况下-find -mtime +30就足够了,因为它是30d滚动窗口。

但是,如果您真的想“上个月或更老”,那么您就必须变得更有创造力,因为Unix可以在几秒钟内按时间戳进行工作。以秒为单位的30d是固定的窗口,但请注意-不是1个日历月。

如果您牢记“上个月”也可能也是“去年”,那就变得更糟。

因此,正好在一个月前得到:

perl -MTime::Piece -e 'print localtime -> add_months(-1);'


要将其转换为Unix时间戳:

perl -MTime::Piece -e 'print localtime -> add_months(-1) -> epoch;'


但是,要弄清楚上个月开始的时间戳会稍微复杂一些-最简单的方法可能是执行上述操作,然后“找出”第一天的时间戳。

例如。

perl -MTime::Piece -e 'print localtime->strptime(localtime->add_months(-1)->strftime("%Y%m"),"%Y%m);'


我们从今天开始减去1个月,将其重新格式化为“年/月”,然后重新解析“年/月”(没有日)以获取月的第一天。

关于linux - linux脚本,将从上个月删除文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30889588/

10-13 09:24