以详细输出的方式递归删除空文件夹

以详细输出的方式递归删除空文件夹

这应该相当简单,但我不确定我遗漏了什么。

我想递归地删除空目录,并获取被删除内容的输出,这个命令肯定有效,但我无法详细打印 -excec 的操作。

while [ -n "$(find . -depth -type d -empty -exec rm -v -rf {} +)" ]; do :; done

经过递归地我的意思是,我想继续删除空文件夹,直到没有其他空文件夹。

$ tree .
.
├── empty
│   └── empty
│       └── empty
└── non-emty
    └── ko

此项将仅删除树中的一个空文件夹

$ find . -depth -type d -empty -exec rmdir -v {} +
rmdir: removing directory, `./empty/empty'

答案1

您不需要 while 循环,您应该使用 rmdir -p 删除空的父级

find . -depth -type d -empty -exec rmdir -v -p {} + 
rmdir: removing directory, `./1/3'
rmdir: removing directory, `./1'
rmdir: removing directory, `.'
rmdir: failed to remove directory `.': Invalid argument
rmdir: removing directory, `./2/3'
rmdir: removing directory, `./2'
rmdir: failed to remove directory `./2': Directory not empty

你没有看到命令输出的原因是你在子 shell 中运行它,$(...)但没有对返回的输出执行任何操作,你可以在子 shell 之前放置一个 echo 来打印出它返回的内容

echo $(find . -depth -type d -empty -exec rmdir -v -p {} +)
rmdir: removing directory, `./1/3' rmdir: removing directory, `./1' rmdir: removing directory, `.' rmdir: removing directory, `./2/3' rmdir: removing directory, `./2'

答案2

使用find,在 Linux 和 MacOS 上,您都可以-delete选择。它已经暗示了-depth。对于详细输出,您可以添加-print。因此它只是:

find . -type d -empty -delete -print

相关内容