在带有简化的busybox的系统上查找超过x天的文件


9

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


2
您不清楚“ mtime不可用”的含义。这不是我认识的实用程序。
库沙兰丹

/ path / to / my / folder $ find -type f -mtime +7 delete find:无法识别:-mtime
Ravi

共享您正在使用的Linux发行版。
西瓦(Siva)'18

3
看起来好像是没有构建的busybox FEATURE_FIND_MTIME。被FEATURE_FIND_NEWER启用?有find -newer工作吗?您的test实用程序或支持的[内在sh功能-nt吗?
斯蒂芬·查泽拉斯

1
您可以解决这个,如果你可以使用那些touch -d/ date +%s[ file -nt other-file ]
斯特凡Chazelas

Answers:


11

-mtimefind(与相反-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

1
是的,busybox在这里是较轻的版本。重建后,find . -mtime +6 -type f -exec rm {} \;为我工作
Ravi

2

来自man find

-atime n

文件的最后访问时间为n * 24小时。当找到最近一次访问文件的24小时周期后,任何小数部分都会被忽略,因此要匹配-atime +1,必须至少在两天前访问文件。

-ctime n

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

根据您要删除的文件的使用情况,这些是的唯一其他选择find。为什么mtime不可用?您正在使用什么文件系统?您是否有其他选择?


询问OP的更多问题应该作为澄清评论而不是答案
杰夫·谢勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.