何か私を悩ませています:
touch a
rm a
わかりました、期待通りに動作します。
mkdir a
rm a
動作するには-rが必要ですが、再帰が何であるかを理解できませんか?フォルダが空の場合、再帰操作は実行されません。私はrm aがaを削除しようとし、空でなければ失敗し、rm -rがaの内容を繰り返すことを望みます。
なぜこれが起こるのですか?
編集:この質問はまったく関係のない質問の重複としてマークされています。私の質問は次のようにまとめることができます。非再帰操作を実行するにはなぜ再帰フラグが必要なのですか? mkdir a, rm -ra には再帰はありません。これは他の質問とは関係がないので、rmは基本的に再帰的ではありません。
答え1
rm
ディレクトリを削除する意図がまったくないからです。
最初はrm
サポートされていません-r
。ユーザーには、ディレクトリ内のすべてのファイルを削除してrm
から(現在空の)ディレクトリを削除する1つのオプションしかありません。rmdir
明らかにこれはうまくいきます非常に迷惑な-r
この問題を解決するために実装されました。
ただし、rm /some/empty/dir
動作を開始すると、以前のバージョンと互換性がなくなります(したがって、rm /some/empty/dir
エラーが発生すると古いコードが壊れる可能性があります)。この動作は-r
定義されていないため問題ありません(-r
オプションがまだ存在していないため)。
答え2
からman rm
:
デフォルトでは、rm はディレクトリを削除しません。 --recursive(-rまたは-R)オプションを使用して、リストされている各ディレクトリとその内容の両方を削除することもできます。
ここで推測します。これはセキュリティ機能なので、ファイルが含まれているディレクトリを自分で知らないうちに削除することはできません。私はrm
ディレクトリに内容がある(比較して)最初にチェックしないと仮定しますrmdir
。
編集:ファイルを再帰的に削除しないと、名前とinodeがディレクトリに保存されているため、ファイルの検索に問題があると仮定します。ディレクトリを削除すると、inodeは存在しますがファイル名を持たない「ゾンビ」ファイルが生成されます。この投稿と比較すると外部構造。