这应该相当简单,但我不确定我遗漏了什么。
我想递归地删除空目录,并获取被删除内容的输出,这个命令肯定有效,但我无法详细打印 -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