Cron Job 每 30 天删除一次文件

Cron Job 每 30 天删除一次文件

我正在使用 Ubuntu 10.04 lts

我正在寻找正确的命令行,以便每 30 天从文件夹 /var/www/myfolder/pictures/ 中删除所有文件。

我应该对 crontab -e 应用什么命令?

我的服务器上也使用 php5。

答案1

您可以使用 find。这将查找超过 30 天的文件并将其删除

/usr/bin/find /var/www/myfolder/pictures/ -type f -mtime +30 -exec rm {} +

在每月 2 日上午 12:30 从 root 的 crontab 运行它(crontab -l以 root 身份使用)

30 12 2 * * /usr/bin/find /var/www/myfolder/pictures/ -type f -mtime +30 -exec rm {} +

由于您使用的是 ubuntu,因此您也可以使用在 运行的 /etc/cron.monthly/standard 52 6 1 * *

#!/bin/sh
# /etc/cron.monthly/standard: standard monthly maintenance script

# delete files older than 30 days from /var/www/myfolder/pictures/
/usr/bin/find /var/www/myfolder/pictures/ -type f -mtime +30 -exec rm {} +

答案2

在这里找到你的朋友。

find <path> -mtime +30 | xargs rm {}

如果您要将其放入脚本中,您可能需要在脚本中对此进行一些健全性检查。

答案3

除了 find 之外,如果您想要删除超过给定日期的文件,您还可以使用 tmpwatch,它旨在删除超过给定时间创建或修改的文件。

tmpwatch --mtime 720 /path/to/dir

你也可以用 30d 代替 720(小时)

虽然阅读您的实际问题听起来像是您想每 30 天删除一次所有文件,而不是删除超过 30 天的文件,但这并不是一回事。

30 天,您实际上是指每月一次吗?如果是这样,您可以在 crontab 中使用 @monthly,然后对文件夹内容运行 rm。

@monthly <user> rm /path/to/dir/*

如果没有的话你可以这样做:

0 12 */30 * * <user> rm /path/to/dir/*

或者您可以从 cron 启动 tmpwatch(但您似乎最好使用 cron 进行调度并执行 rm,这样可以节省 CPU 时间,以证明目录中的所有内容自上次删除所有内容以来都是新的,这对我来说似乎有点多余)。应该可以让您入门

相关内容