【问题标题】:How to delete files and directories older than n days in linux如何在linux中删除超过n天的文件和目录
【发布时间】:2015-09-22 06:42:49
【问题描述】:

我有一个名为 repository 的目录,其中包含许多文件和子目录。我想查找自过去 14 天以来未修改的文件和目录,以便我可以删除这些文件和目录。 我已经编写了这个脚本,但它只给出了目录名称

#!/bin/sh

M2_REPO=/var/lib/jenkins/.m2/repository
echo $M2_REPO
OLDFILES=/var/lib/jenkins/.m2/repository/deleted_artifacts.txt
AGE=14 

find "${M2_REPO}" -name '*' -atime +${AGE} -exec dirname {} \; >> ${OLDFILES}

【问题讨论】:

标签: linux shell


【解决方案1】:

您可以使用 find -delete 标志来删除文件。请注意将其放在命令的末尾,以便首先应用时间过滤器。

您可以先列出该命令找到的文件:

find "${M2_REPO}" -depth -mtime +${AGE} -print

-d 标志使查找执行深度优先搜索,-delete 命令暗示了这一点。

如果您喜欢结果,请将打印更改为删除:

find "${M2_REPO}" -mtime +${AGE} -delete

【讨论】:

  • 它会打印目录和文件?
  • 是的,它会同时打印(nad delete)。使用-type f,您可以将结果限制为常规文件。如果需要,手册页会包含有关符号链接处理等的所有脏细节。
  • 当我执行命令时,我收到一个警告 find: warning: the -d option is deprecated;请改用 -depth,因为后者是符合 POSIX 的功能。
  • 我将答案更新为使用-depth,-d 只是它的同义词。
  • 我试过这个并没有删除目录,可能bcos删除文件会更新目录上的mtime。
【解决方案2】:

find /path/to/files* -mtime +5 -exec rm {} \;

注意rm、{}和\之间有空格;

解释

第一个参数是文件的路径。如上例所示,这可以是路径、目录或通配符。我建议使用完整路径,并确保在没有 exec rm 的情况下运行命令,以确保获得正确的结果。

第二个参数 -mtime 用于指定文件存在的天数。如果您输入 +5,它将查找超过 5 天的文件。

第三个参数 -exec 允许您传入命令,例如 rm。这 {} \;最后需要结束命令。

这应该适用于 Ubuntu、Suse、Redhat 或几乎任何版本的 linux。

【讨论】:

  • 在执行 rm 命令之前,有没有办法可以在文件中写入将被删除的文件名和目录名
  • 使用 find /path/to/files* -mtime +5 > 日志文件获取仅超过 5 天的文件。
【解决方案3】:

我知道这是一个非常古老的问题,但 FWIW 我分两步解决了这个问题,首先查找并删除超过 N 天的文件,然后查找并删除空目录。我尝试一步完成,但删除操作会更新文件父目录的修改时间,然后(空)目录不再符合-mtime 标准!这是带有 shell 变量的解决方案:

age=14
dir="/tmp/dirty"
find "$dir" -mtime "+$age" -delete && find "$dir" -type d -empty -delete

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多