我想使用以下命令删除所有早于 1 天的文件夹:
find /test -mmin +1440 | xargs rm -rf
但是find列表的输出/test(并相应地将其删除)。
如何只找到 的子目录/test?( -maxdepth/-mindepth在 AIX 中不可用)
POSIXly:
find /test/. ! -name . -type d -mtime +0 -exec rm -rf {} \; -prune
Run Code Online (Sandbox Code Playgroud)
(我们-prune用于成功删除的目录,这样find就不会抱怨它们突然消失了)。
在任何情况下,请注意-mtime目录文件的修改时间(如上所述)仅反映最后一次在其中添加、删除或重命名条目的时间。
当其中链接的任何文件(常规或目录类型或其他类型)的内容被修改时,它不会更新。特别是,对子目录或其内容所做的任何更改都不会影响目录的修改时间。
请注意,所有-mindepth,-maxdepth和-mmin都是 GNU 扩展(尽管它们在其他一些实现中受支持)。
的标准等价物find . -maxdepth 1是:
find . -name . -o -prune
Run Code Online (Sandbox Code Playgroud)
对于-mindepth 1:
find . ! -name .
Run Code Online (Sandbox Code Playgroud)
对于-mindepth 1 -maxdepth 1:
find . ! -name . -prune
Run Code Online (Sandbox Code Playgroud)
对于 以外的目录.,使用find some/dir/. ...如上。
对于其他深度值,您可以使用-path,但请注意,由于它最近才被添加到标准中,因此某些系统(如 AIX)仍然没有它。
对于:-maxdepth 2:
find . ! -path '*/*/*' -o -prune
Run Code Online (Sandbox Code Playgroud)
对于:-mindepth 2:
find . -path '*/*/*'
Run Code Online (Sandbox Code Playgroud)
对于另一个目录:
find some/dir//. -path '*//*/*/*'
Run Code Online (Sandbox Code Playgroud)
正如@meuh 在他的评论中所说,您可以使用/test/*代替/test. 您的命令可能与此类似:
find /test/* -type d -mmin +1440 | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
在这种情况下,只有子文件夹中/test会被移除。