删除超过 1 天的文件夹

Nir*_*Nir 5 linux find aix

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

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

但是find列表的输出/test(并相应地将其删除)。

如何只找到 的子目录/test?( -maxdepth/-mindepth在 AIX 中不可用)

Sté*_*las 7

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)


Mat*_*ias 5

正如@meuh 在他的评论中所说,您可以使用/test/*代替/test. 您的命令可能与此类似:

find /test/* -type d -mmin +1440 | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只有子文件夹/test会被移除。

  • `find` 的输出不能被可靠地处理(更不用说 `xargs`,因为空格和引号也是一个问题)。您应该改用`-exec` 谓词。 (2认同)