我想使用以下命令删除所有超过 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 {}