Rm

為什麼cprm分開處理目錄?

  • March 2, 2013

為什麼工具喜歡cprm處理目錄與正常文件分開?它們都要求使用者明確指定她想要遞歸行為,否則它們根本不會處理目錄。

我與電腦的第一次互動(不久前)是在 Windows/GUI/點擊/拖放環境中進行的,無論目標如何,這些操作的行為似乎總是很自然的。

當我使用萬用字元發出命令時,這種行為尤其讓我感到沮喪。如果我想刪除目錄 ( *) 中除非空子目錄之外的所有內容怎麼辦?

我只能想像這是某種安全功能,以防止使用者在腳下開槍,但這與我對一些 Unix 原則的理解相矛盾:

  • Unix 通常不會保護使用者免受她自己的傷害。它一直假設使用者知道她在做什麼。
  • 對於 Unix,一切都是文件。目錄不就是另一個文件嗎?為什麼他們會受到不同的對待?

我的問題:

  • 這種行為是源於技術限制還是故意選擇?

在後者的情況下,

  • 是否有任何歷史記錄說明了促成這一選擇的原因?

Derobert 的為什麼 unix mv 程序不需要目錄的 -R (遞歸)選項,但 cp 確實需要它?基本上回答了您的問題:複製或刪除正常文件與對目錄執行相同操作不同,因為對於目錄,您必須處理其中包含的所有文件。因此,操作是根本不同的。

另外值得注意的是,有一個特殊的實用程序rmdir只能作用於空目錄。在不檢查事實的情況下,這導致人們得出結論,也許最初rm只能刪除非目錄,並且必須通過遞歸地使用rm清空目錄然後rmdir刪除這些目錄來實現深度刪除。

引用自:https://unix.stackexchange.com/questions/66595