我是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/