递归删除带有详细输出的空文件夹

kma*_*ada 0 scripting bash find shell-scripting

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

我想递归删除空目录,并获得正在删除内容的输出,此命令肯定有效,但我无法详细打印 -excec 的操作。

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

通过递归我的意思是,我想保持删除空文件夹,直到有没有其他的空文件夹。

$ tree .
.
??? empty
?   ??? empty
?       ??? empty
??? non-emty
    ??? ko
Run Code Online (Sandbox Code Playgroud)

此项只会删除树中的一个空文件夹

$ find . -depth -type d -empty -exec rmdir -v {} +
rmdir: removing directory, `./empty/empty'
Run Code Online (Sandbox Code Playgroud)

use*_*517 6

您不需要 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
Run Code Online (Sandbox Code Playgroud)

您没有看到命令输出的原因是您在子shell中运行它,$(...)但对返回的输出不做任何处理,您可以在子销售之前放置一个回声以打印它返回的内容

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'
Run Code Online (Sandbox Code Playgroud)