【问题标题】:Delete files older than 30 days, but in 1 directory the retention 6 months删除超过 30 天的文件,但在 1 个目录中保留 6 个月
【发布时间】:2020-01-29 13:37:51
【问题描述】:

我想创建一个删除超过 30 天的文件的查找,但我有 1 个目录,其中保留期应为 6 个月。

这怎么可能?

如果我没记错的话,这会删除所有子目录中超过 30 天的所有文件。

/bin/find /root/script/* -type f -ctime +30 -exec rm {} \;

我如何设置这个目录需要不同的保留:

/root/script/owner

【问题讨论】:

  • 我想说:生成候选列表(超过 30 天),过滤掉特定目录,为过滤后的文件夹生成另一个候选列表(现在超过六个月),最后删除所有这两个列表的元素。

标签: linux bash scripting find


【解决方案1】:

您可以使用 -path 或 -regex 结合 '!' 从查找输出中排除 /root/script/owner否定测试

find /root/script -type f -ctime +30 '!' -path '/root/script/owner/*' -exec rm {} \;
OR
find /root/script -type f -ctime +30 '!' -regex '/root/script/owner/.*' -exec rm {} \;

然后对特殊文件夹执行自定义删除

find /root/script/owner -type f -ctime +180 -exec rm {} \;

【讨论】:

    【解决方案2】:

    您可以组合多个运算符,以便它们限制包含的内容。您实际上已经这样做了,因为您有一个 -type-ctime,以及一个隐含的 AND

    你需要添加的是regex,你可以这样做:

    /bin/find /root/script/* -type f ! -regex '/root/script/owner/.*' -ctime +30 -exec rm {} \;
    

    这应该排除该特定树中的文件,因为 ! -regex 对它们来说是错误的。基本思想是只有满足所有条件的才能进行进一步的操作。

    在这种情况下,将排除任何非常规文件。在其他中,任何与正则表达式不匹配的都将被排除在外。在剩下的那些中,我们将丢弃任何不符合 30 天要求的。剩下的将由rm 处理。

    剩下的目录,当然是用更大的时间完成的:

    /bin/find /root/script/owner -type f -ctime +186 -exec rm {} \;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-30
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      相关资源
      最近更新 更多