【问题标题】:Deleting files that are older than one day [duplicate]删除超过一天的文件[重复]
【发布时间】:2015-07-07 00:01:01
【问题描述】:

我有一个在日志目录中创建多个日志文件的服务器。由于这种日志记录机制,它占用了我服务器上的大量磁盘空间。我想编写一个脚本,删除所有超过一天的文件并保留最新的。

我可以使用ls -trl 命令以排序形式列出目录。但我无法理解如何删除这些文件。请帮忙。

【问题讨论】:

  • 使用find(1),注意不要射中自己的脚。

标签: linux bash


【解决方案1】:

你不想要ls,你想要find

它有一个简洁的参数-mtime,将结果限制在特定的时间增量内,-exec 允许您提供一个命令来运行结果。

例如,

find -mtime +10 -name "*tmp*" -exec rm {} \;

对所有早于10 天的文件使用rm,名称中包含tmp

哦,小心点。

非常小心。

【讨论】:

    【解决方案2】:

    find . -mtime +1 -exec rm {} \;

    【讨论】:

    • 虽然代码很受欢迎,但它应该总是有一个附带的解释。这不必很长,但在意料之中。
    • 我同意这一点。我只是没有评论我的答案,因为与我同时发布的其他答案实际上是相同的并得到了解释。没有看到要编辑我的点。
    • -mtime 很古怪。您可能希望 +0 与 +1 一样,它不会计算文件,直到它们至少存在两天(一整天大于 1)。或者你可以使用 -mmin +$(( 1*24*60 )),它可以在几分钟内完成。
    【解决方案3】:

    您可以使用以下命令:

    /usr/bin/find <Your Log Directory> -mtime +1 | xargs rm -f
    

    mtime - 提供文件修改时间。

    +1 - 表示超过一天。

    【讨论】:

    • 如果你要使用管道,请确保你使用 -print0 和 xargs -0,否则你会遇到文件名中有空格的问题
    • 我不鼓励使用find | xargs rm -ffind 有一个 -delete 选项。
    • -mtime 很古怪。您可能希望+0+1 一样,它不会计算文件,直到它们至少 两天(一整天大于1)。或者您可以使用-mmin +$(( 1*24*60 )),几分钟内即可使用。
    【解决方案4】:

    尝试使用 rm 并找到类似的命令:

    find . -mmin +$((60*24)) -exec rm {} \;
    

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 1970-01-01
      • 2016-09-20
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 2012-06-22
      相关资源
      最近更新 更多