查找命令删除一些目录并忽略其他不起作用的目录

查找命令删除一些目录并忽略其他不起作用的目录

我想在目录中删除某些子目录,同时排除其他子目录。一些子目录是按所有者删除的,一些子目录是按名称删除的。我已经按照手册页进行了配置,但没有删除任何文件,即使那些没有明确排除的文件也是如此。在测试时,如果我删除所有排除参数,那么所有文件都会被删除,正如您所期望的那样。运行它时没有出现任何错误,只是什么也没发生。希望对脚本进行审查。名称已更改以保护无辜者。

find /nobackup/. -name '*' -type d ! -user 'foo' \! -user 'foo1' ! -user 'foo2' ! -user 'foo3' \! -user 'foo4' ! -name 'acmecache' -delete

答案1

我想补充的是-depth,这样就可以一次性删除文件树。这-name '*'无关紧要。

您的描述表明您想要删除某些目录-delete只会删除空目录。您编写的代码将顺利进入目录acmecache并删除其中不属于 the_foo*_ 用户的所有目录。我假设这不是您想要的,因此您需要使用-prune

尝试一下这个。echo当你对结果满意时,删除

find /nobackup -depth -type d \( \( -user 'foo' -o -user 'foo1' -o -user 'foo2' -o -user 'foo3' -o -user 'foo4' -o -name 'acmecache' \) -prune \) -exec echo rm -rf {} \;

答案2

脚本看起来是正确的。

它的作用如下:删除下面/nobackup和下面不属于的所有目录用户,也排除目录称为acmecache

这个-name '*'争论似乎完全没有必要。

还请考虑唯一-delete删除空目录. 但如果目录不为空则会打印错误。

相关内容