我想删除不包含任何文件的顶级目录,但可以包含其他空目录(同样意味着不包含文件)。例如:
$ ls -R
.: foo/
./foo/: bar bar1
./foo/bar/:
./foo/bar1/:
这里,我想删除目录foo/
(及其子目录)。起初,我想使用类似的方法find . -type d -empty
进行搜索,但由于 foo 包含目录,因此它只能找到较低级别的目录:
$ find . -type d -empty
./foo/bar
./foo/bar1
我想我可以循环直到find . -type d -empty
什么都找不到,但我最终可能会得到一个包含许多空目录的非常大的目录结构,而且我担心这样做会对性能产生影响...
任何想法?
答案1
find . -depth -type d -empty
应该可以解决问题。 -depth
将导致 find 在目录本身之前处理目录的内容。
编辑:
假设您会-delete
在 find 的末尾使用类似的东西,否则您会遇到您描述的相同问题。同样值得注意的是,-delete
实际上意味着-depth
,所以实际上,坚持使用find . -type d -empty -delete
会让您一次性找到您想要的东西;假设您删除遇到的任何其他较低级别的空目录也没有问题。