我正在运行以下命令:
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 用途之后。