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)
您不需要 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)