我正在使用 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 时间,以证明目录中的所有内容自上次删除所有内容以来都是新的,这对我来说似乎有点多余)。应该可以让您入门