【问题标题】:CentOS: delete X-days old files using cronCentOS:使用 cron 删除 X 天的旧文件
【发布时间】:2014-07-01 06:15:07
【问题描述】:

我想使用 cronjob 删除 x 天前的 .tar.sql 文件。

我尝试了多个命令,但都不起作用。

命令,例如,

find /path/to/files -type f -mtime +10 -delete
find /path/to/folder -name '*.sql' -mtime +30 -delete
find "$FILEDIR" -mtime +14 -delete
[[ $FILEDIR == /home/abc/* ]] && find "$FILEDIR" -mtime +14 -delete

以上命令运行完美,但不会删除任何内容。 需要帮助。

【问题讨论】:

  • 第一个应该可以: find /path/to/files -type f -mtime +10 -delete 如果没有,你确定对所有文件都有写权限和执行权限吗?正在执行 cron 的用户的相关文件的父目录?你有 cron 输出吗?
  • 我使用 cron 在同一目录中创建了 .tar 文件。所以写访问是存在的。
  • 这是同一个目录,但您是否尝试过自己删除实际文件?添加到您的 cron "> /your/log/file.log 2>&1" 以查看打印的错误。还将 -print 添加到您的 find 命令中,以使其打印找到的所有匹配项并查看您的日志以进行分析。不过,您的命令本身应该是正确的。

标签: linux cron find


【解决方案1】:

我将 for 循环和 echo 语句用于调试目的,并确保我不会错误地删除任何内容。

所以试试这个:

for filename in `find /path/to/files -type f -mtime +10`; do echo "rm $filename"; done

这将列出它计划做什么。检查它,确保它看起来不错,然后通过删除 echo 语句运行

for filename in `find /path/to/files -type f -mtime +10`; do rm $filename; done

如果不行,可以将上面的内容输出到文件中,作为脚本运行

for filename in `find /path/to/files -type f -mtime +10`; do echo "rm $filename"; done > myremove.sh

然后运行它

sh -x ./myremove.sh 

并检查上面的输出是否有错误。

一旦你得到它没有错误,你可以将它作为单个命令或脚本添加到 cron

【讨论】:

  • for filename in find /path/to/files -type f -mtime +10; do echo "rm $filename"; done 命令运行完美,但再次没有输出
  • 输入命令 "find /path/to/files" -type f -mtime +10" - 有任何输出吗?可能您没有任何候选文件,例如修改超过 10 个的文件几天前
猜你喜欢
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
相关资源
最近更新 更多