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