将删除上个月文件的linux脚本

时间:2015-06-17 10:58:26

标签: linux

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

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

但由于一个月内的天数可能在30到31天之间变化,因此无用。 请帮我解决这个问题。感谢

3 个答案:

答案 0 :(得分:0)

嗯,首先 - 上个月你的清洗有多重要?我的意思是 - 如果你在5月1日运行你的脚本,你真的希望从昨晚删除文件吗?

对于大多数用途 - find -mtime +30就足够了,因为它是一个滚动的30d窗口。

然而,如果你真的想要'上个月和更老',那么你必须更有创意,因为Unix可以在时间戳上工作 - 只需几秒钟。 30秒是一个固定的窗口,但正如你所说 - 1个日历月不是。

如果你记住“上个月”也可能也是“去年”,情况会变得更糟。

一个月前准备好了:

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

将其转换为Unix时间戳:

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

实际上要弄清楚上个月开始的时间戳稍微复杂一点 - 最简单的方法可能就是做上面的事情,然后“弄清楚”第一天的时间戳。

E.g。

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

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

答案 1 :(得分:0)

强制性bash解决方案。从包含要删除的文件的工作目录中,您可以运行此

for i in $(ls -al | awk '/May/{print $NF}'); do rm -rf $i; done

它将明确匹配5月份创建的所有文件,然后将其删除。

ls -al命令列出带有日期的文件,然后awk命令匹配日期为May的文件,然后只输出文件名。您可以在通过运行此

来拉动扳机之前测试它
ls -al | awk '/May/{print $NF}'

一旦确定找到的文件是您要删除的文件,就可以运行for循环删除它们。

答案 2 :(得分:0)

运行以下命令删除工作目录中的上个月文件。

1,你可以看到工作目录中的最后一个蛾文件运行

sudo find . -mtime +30

可以将数字参数指定为    + n表示大于n,    -n小于n,    n恰好是n。

sudo find . -mtime +30  -delete 

删除您可以运行的系统中的所有文件,如下所示

  sudo find / -mtime +30  -delete