您好我试图以递归方式删除/删除目录及其子目录和文件。我不想使用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问题的答案是有道理的,但我不知道如果子目录的级别很少,它怎么能处理?
答案 0 :(得分:4)
我只想使用
find "$1" -delete
unlink
也许是一个很好的想法,但我不确定你是否考虑作弊:)
答案 1 :(得分:2)
删除目录内容后,无论如何都可以将其删除。所以只需删除else语句并将remove-directory-command向上移动一级:
function recursive(){
for i in "$1"/*; do
if [ -d $i ];then
echo "FILE $i IS A DIRECTORY OR A (SYM)LINK TO ONE"
if [ "$(ls -A $i)" ];then
echo "DIRECTORY IS NOT EMPTY CALLING RECURSIVE AGAIN"
recursive $i
fi
echo "DELETE THIS DIRECTORY: ITS (NOW) EMPTY"
elif [ -e $i ];then
echo "DELETING FILE $i"
else
echo UNKNOWN FILE $(basename $i)
fi
done
}