【发布时间】:2012-09-19 19:45:10
【问题描述】:
您好,我正在尝试递归删除/删除一个目录及其子目录和文件。我不想使用 rm -r。我想出了以下代码。
function recursive(){
for i in "$1"/*; do
if [ -d $i ];then
echo "FILE $i IS A DIRECTORY"
if [ "$(ls -A $i)" ];then
echo "DIRECTORY IS NOT EMPTY CALLING RECURSIVE AGAIN"
recursive $i
else
echo "DELETE THIS DIRECTORY: ITS EMPTY"
fi
elif [ -e $i ];then
echo "DELETING FILE $i"
else
echo UNKNOWN FILE $(basename $i)
fi
done
}
问题是当我深入挖掘子目录时,我可以在途中删除它们的文件,但是一旦我到达目录树的底部,我必须删除所有现在为空的目录(也许在我回来的路上起来?)
如果有人能帮助我理解其逻辑或引导我走向正确的方向,我将不胜感激。
THIS 问题的答案是有道理的,但我不知道如果子目录级别很少怎么处理?
【问题讨论】:
-
一旦你到达目录树的底部,你最深的 recursive() 就完成了它的 for 循环。然后它跳到下一个更高的,完成
recursive $i。在recursive $i调用之后目录应该是空的,所以也许然后删除目录。 -
“我想打螺丝,但我不想用螺丝刀。” 为什么你不想使用
rm -r?如果不出意外,这个问题的答案可以帮助我们更好地了解您的要求。 -
我认为他这样做是出于教育目的。
-
我现在想通了...嗯,基本上我想添加回收站功能,这意味着实际上我不会删除,而是将其移动到垃圾箱...但只是为了简化我是这样写的。
-
@CQQL:这当然是合理的,但不如 OP 的实际声明有用。