rmdirが再帰的に機能しないのはなぜですか?

rmdirが再帰的に機能しないのはなぜですか?

rmdir空のディレクトリのみを削除してください。rm -rf再帰削除を使用します。

  • rmdirなぜ再帰オプションはありませんか?論理的に削除すると目次、を使用したいrmdir
  • rm最も単純な場合を除くすべての場合にディレクトリを削除するために使用されることを考慮すると、この機能がrmdir存在するのはなぜですか?この機能はに含まれていますrm

これはただ歴史の偶然でしょうか?

答え1

ディレクトリの切断は元の権限を持つタスクです。:

ディレクトリの接続を解除することも違法です(スーパーユーザーを除く)。

だからrmdir実装しました。ディレクトリを削除する小さなバイナリで、その時点で、ディレクトリ内の..合計を削除して.からディレクトリ自体を削除することが含まれていました。rmdirsetuid rootとして設計されており、以下を使用して個別の権限テストを実行します。access実際のユーザーがディレクトリを削除できるかどうかを決定します。他のsetuidルートバイナリと同様に、シンプルで集中的に保つのが最善です。

rm -r実際にこの別のバイナリを使用してください必要に応じてディレクトリを削除します。

rm -rとの間の継続的な違いは、rmdirこれらの初期の違いの結果であるようです。

おそらくrm、再帰削除機能は非常に初期に取得され、小さな所管を持つ必要があったrmdirので、rmdir再帰削除機能を提供すること自体は決して役に立たなかった。

答え2

再帰的なrmdir(利便性)の代替は次のとおりです。

find . -depth -type d -exec rmdir {} \;

これにより空のディレクトリのみが削除され、一部が空でないと無害なエラーが発生します。

再帰的なrmdirは、カスケードエラーを続行するよりもエラーが発生した場合にサブツリーを中断する方が賢明ですが、おそらく高速ではありません。

指摘したように、rmdirにはこの-pオプションがありますが、正確に再帰的ではありません。前述のように、findを使用する機能は利点を最小限に抑えるため、再帰オプションを追加したいインセンティブを排除できます。

関連情報