【问题标题】:Delete folder older than 30 minutes with Cron使用 Cron 删除超过 30 分钟的文件夹
【发布时间】:2018-01-21 08:56:29
【问题描述】:

我想知道我应该在 Cron 中插入什么作业,以便删除每个超过 30 分钟的文件夹

我试过了:

# 30 * * * * find /path/to/my/folder -type f -mmin +30 -exec rm -fr -maxdepth 0 {} \;

但它似乎没有做任何事情。

Stackoverflow 上还有其他帖子,但他们都在谈论删除文件,这很酷,但我也想删除文件夹本身及其内容。

【问题讨论】:

  • 哪里你把那个节(哪个文件)? cron 是否有权删除目录?当 cron 尝试运行它时,你在 syslog 中看到了什么?
  • -type f 实际上确保您不要触摸目录。
  • 你还需要find吗?你只想删除/path/to/my/folder吗?
  • 检查日志文件是否有错误,有吗? BTW:想想你为什么要在分号前加上反斜杠!
  • 似乎没有任何错误,当我执行grep CRON /var/log/syslog 时,我看到最后两行:Jan 19 20:30:01 ubuntu-512mb-lon1-01 CRON[10764]: (root) CMD (find /p2e/public/pyfilesdownload/ -type d -mmin +5 -exec rm -fr -maxdepth 0 {} \;) Jan 19 20:30:01 ubuntu-512mb-lon1-01 CRON[10763 ]: (CRON) 信息(未安装 MTA,丢弃输出)

标签: shell ubuntu cron


【解决方案1】:

我实际上发现最好的方法是将Cron中的命令分成2部分,并使用-delete参数

代码

30 * * * * sudo find /my/folder/* -type f -mmin +30 -delete && sudo find /my/folder/* -type d -empty -mmin +30 -delete 

解释

30 * * * *:始终每 30 分钟执行一次
sudo find /my/folder/* -type f -mmin +45 -delete:删除所有超过 45 分钟的文件和子文件
&&:仅当第一个命令成功运行时才执行
@ 987654326@ : 删除所有超过 45 分钟的空文件夹

在 Ubuntu 16.04 上工作

【讨论】:

    【解决方案2】:

    tmpwatch(大多数 RedHat 发行版)软件包都可以。

    描述 tmpwatch 递归删除在给定时间内未访问的文件。通常,它用于清理用于 临时存放空间,例如 /tmp。

    tmpwatch -umc 30m --nodirs notThisDir /path/to/directory/ThatIwantToClean
    

    man tmpwatch 中的更多信息。这个包在/etc/cron.daily/tmpwatch 中提供了一个cron 示例。您可以修改脚本以满足您的需要,并将 cron 放入 /etc/cron.hourly/。类似于以下内容:

     $ cat /usr/local/bin/cleanfolder
     #!/bin/bash
    
     flags="-umcvv"
     /usr/sbin/tmpwatch "${flags}" 30m /my/folder
    

    更改权限:

    $ chmod a+x /usr/local/bin/cleanfolder
    

    /etc/cron.d/cleanfolder-cron,这样写:

    30 * * * * root /usr/local/bin/cleanfolder
    

    重新加载您的 cron 服务。

    【讨论】:

    • 谢谢,但我使用的是 Ubuntu 16.04,我该如何在我的机器上安装它?
    • 一些快速的谷歌搜索,得到这个:askubuntu.com/questions/717661/package-for-tmpwatch
    • 这个已经试过了,不行。它无法解压下载的文件,它已损坏
    • 谢谢,正确安装了正确的软件包。遗憾的是,我在您指定的目录中找不到使用 tmpwatch 的 cron 作业示例。刚刚尝试2 * * * * /usr/sbin/tmpwatch -umc 1m /my/folder; 只是为了检查它是否正常工作,并且它没有删除任何内容。我也试过2 * * * * tmpwatch -umc 1m /p2e/uploads;,但它不起作用。直接从控制台运行该命令确实有效。
    【解决方案3】:

    我假设您考虑的是目录。然后将 -type f 选项更改为 -type d

    【讨论】:

    • 正确的命令是 find 。 -type d -mmin +30 -exec rm -rf {} \;它适用于 Suse Linux.. 目录和内容已被删除
    【解决方案4】:

    来自手册页 ... 寻找 。 -type d -empty -delete - 删除所有空目录。 rm - 删除文件(rm -rf 将递归删除文件夹及其内容)。

    ...应该这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      相关资源
      最近更新 更多