我需要在开发单元中查找并删除超过 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
不可用?你使用什么文件系统?您是否探索过其他选择?