2

您好我正在尝试以递归方式删除/删除目录及其子目录和文件。我不想使用 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

    }

问题是当我深入挖掘子目录时,我可以在途中删除它们的文件,但是一旦我到达目录树的底部,我必须删除所有现在为空的目录(也许在我备份的路上?)

如果有人能帮助我理解其逻辑或引导我走向正确的方向,我将不胜感激。

这个问题的答案是有道理的,但我不知道如果子目录的级别很少,它怎么处理?

4

2 回答 2

4

我会简单地使用

find "$1" -delete

unlink可能也是一个不错的想法,但我不确定你是否会考虑作弊:)

于 2012-09-27T23:16:02.763 回答
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

}
于 2012-09-27T23:04:09.137 回答