在使用精简的 busybox 的系统上查找早于 x 天的文件

在使用精简的 busybox 的系统上查找早于 x 天的文件

我需要在开发单元中查找并删除超过 1 周的文件。本机上可用的实用程序数量有限。-mtime find的谓词不可用。在这种情况下,如何检查所有早于 x 天的文件?

答案1

-mtime是 的标准谓词find(与 相反-delete),但看起来您有 的精简版本busybox,其中该FEATURE_FIND_MTIME功能已在构建时禁用。

如果您可以在启用它的情况下重建 busybox,您应该能够执行以下操作:

find . -mtime +6 -type f -exec rm -f {} +

或者如果FEATURE_FIND_DELETE也启用了:

find . -mtime +6 -type f -delete

如果没有,则可以对设置为一周前修改时间的文件使用其他选项find -newer(假设已启用)。FEATURE_FIND_NEWER

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -newer ../ref -exec rm -f {} +

或者如果-newer不可用但sh支持:[-nt

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -exec sh -c '
    for f do
      [ "$f" -nt ../ref ] || printf "%s\0" "$f"
    done' sh {} + |
    xargs -0 rm -f

答案2

man find

-atime n

文件上次访问时间为 n*24 小时前。当 find 计算出上次访问文件是在多少个 24 小时周期之前,任何小数部分都会被忽略,因此为了匹配 -atime +1,文件必须至少在两天前被访问过。

-c时间n

文件状态上次更改是在 n*24 小时前。请参阅 -atime 的注释,了解舍入如何影响文件状态更改时间的解释。

根据您要删除的文件的用例,这些是您唯一的其他选项find。为什么mtime不可用?你使用什么文件系统?您是否探索过其他选择?

相关内容