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 を 1 レベル上に移動します。

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 に答える