删除超过 1 天的文件夹

删除超过 1 天的文件夹

我想使用以下命令删除所有超过 1 天的文件夹:

find /test -mmin +1440 | xargs rm -rf

find但是列表的输出/test(并且会相应地删除它)。

我怎样才能只找到 的子目录/test? (-maxdepth/-mindepth在 AIX 中不可用)

答案1

正如@meuh 在他的评论中所说,你可以使用/test/*而不是/test.您的命令可能类似于以下内容:

find /test/* -type d -mmin +1440 | xargs rm -rf

在这种情况下仅子文件夹/test将被删除。

答案2

POSIXly:

find /test/. ! -name . -type d -mtime +0 -exec rm -rf {} \; -prune

(我们用于-prune成功删除的目录,这样find就不会抱怨它们突然消失了)。

无论如何,请注意,-mtime目录文件的修改时间(如上面所检查的)仅反映最后一次在其中添加、删除或重命名条目的时间。

当其中链接的任何文件(类型为常规或目录或其他)的内容被修改时,它不会更新。特别是,对子目录或其内容所做的任何更改都不会影响目录的修改时间。

请注意,所有-mindepth-maxdepth-mmin都是 GNU 扩展(尽管它们在其他一些实现中也受支持)。

的标准等效项find . -maxdepth 1是:

find . -name . -o -prune

为了-mindepth 1

find . ! -name .

为了-mindepth 1 -maxdepth 1

find . ! -name . -prune

对于除 之外的目录.,请find some/dir/. ...按上述方式使用。

对于其他深度值,您可以使用-path,但请注意,由于它最近才被添加到标准中,因此某些系统(如 AIX)仍然没有它。

为了:-maxdepth 2

find . ! -path '*/*/*' -o -prune

为了:-mindepth 2

find . -path '*/*/*'

对于另一个目录:

find some/dir//. -path '*//*/*/*'

答案3

嗯,-mmin 主要是一个 GNUism,很可能在 AIX 上不受支持,因为与 BSD 人员和我在 20 世纪 80 年代已经使用的扩展相比,它是一个愚蠢的扩展。鉴于 sfind 在 AIX 上编译得很好,我建议:

sfind . -mindepth 1 -type d -mtime +24h -exec rm -rf {} +

代码位于 schilytools 中:https://sourceforge.net/projects/schilytools/files/

答案4

find /test -type d -mtime +1| egrep -v '^/test$'|xargs -I{} rm -rf {}

相关内容