如何让“查找”排除其搜索的文件夹?

如何让“查找”排除其搜索的文件夹?

我正在运行以下命令:

find /var/www/html/content/processing -type d -mtime +1 -exec rm -rf {} \;

我想删除该processing文件夹下的所有文件夹(处理文件夹绝对不能删除)。

该命令也会删除该processing文件夹。如何限制脚本删除仅有的该文件夹下的文件夹?

答案1

最简单的方法就是添加-mindepth 1,这将跳过第一个深度层次从而忽略你的父目录。

此外,您无需额外-exec致电rm,您可以直接进入delete文件夹如果它们是空的。

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -delete

如果它们不为空:

find /var/www/html/content/processing -mindepth 1 -type d -mtime +1 -exec rm -rf {} \;

如果你懒的话,也可以扩展通配符。由于*默认情况下不包括当前目录(除非dotglob设置),你也可以这样做:

find /var/www/html/content/processing/* -type d -mtime +1 -delete

但是,由于该dotglob选项,这也不会包括隐藏文件夹。

答案2

问题是 find 会返回当前目录 (.) 以及其他目录,因此它会删除正在处理的文件夹以及子目录。解决这个问题的快速方法是附加选项

-not -name .

这会阻止 find 输出当前目录,进而阻止其被删除。

如果您在处理目录中运行该命令,那么这将起作用,因此为了考虑到您使用绝对路径的事实:

-not -name /var/www/html/content/processing

整个命令如下:

find /var/www/html/content/processing -type d -mtime +1 -not -name /var/www/html/content/processing -exec rm -rf {} \;

答案3

已经回答了,但我仍然想列出另一种方法。

find /var/www/html/content/processing -mindepth 1 -maxdepth 1 -type d

这将排除顶级目录(以及子目录),现在您可以应用我们想要在其上应用的任何命令。

>> 选项:
-mindepth 1:排除根目录
-maxdepth 1:避免解析子目录。(对于所询问的特定场景,您不需要这个)。-
type d:仅列出目录类型。此选项应位于 mindepth maxdepth 用途之后。

相关内容