Recursive

為什麼遞歸不與rm一起向上?

  • September 2, 2014

我想知道一般的遞歸方向,特別是 rm 。

rm 遞歸只能向下正確嗎?

執行: sudo rm -R *.QTFS將刪除目前目錄及其子目錄中的所有 *.QTFS 文件,對嗎?

顯示的目前目錄ls -lha還包含...連結,因為缺少更好的詞,那麼為什麼遞歸不在目錄樹中向上跟踪呢?rm 應用程序是否存在人為限制,或者.不是..真實的東西?

rm遞歸只能向下正確嗎?

rm -r x y將刪除x其中y的所有內容(如果它們是目錄),但不會刪除它們的父級或它們之外的任何內容。

執行:sudo rm -R *.QTFS將刪除目前目錄及其子目錄中的所有 *.QTFS 文件,對嗎?

不會。它將刪除所有名為*.QTFS的文件、遞歸地在名為的目錄*.QTFS中的所有文件以及這些目錄本身。如果您想要其他刪除行為,請使用find -delete.

顯示的目前目錄ls -lha還包含...連結,因為缺少更好的詞,那麼為什麼遞歸不在目錄樹中向上跟踪呢?rm 應用程序是否存在人為限制,或者.不是..真實的東西?

這是人為的限制rm

不過,這並不是真的那麼人工——這是它唯一可行的方法。如果rm跟隨父..連結,everyrm -r將刪除系統上的每個文件,方法是跟隨所有..連結一直返回到/. 在列出rm內容時會看到每個目錄中的...條目,並因此而明確地忽略它們。

實際上,您可以自己嘗試一下。執行rm -r .,大多數rm實現將拒絕採取行動,明確報告錯誤:

$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’

(該消息來自 GNUrm;其他類似)。當它隱含地遇到這些條目時,而不是作為顯式參數,它只是忽略它們並繼續。POSIX 需要這種行為。在 GNUrm和許多 BSD 中,它由fts_read一系列層次遍歷函式自動提供。

或者...不是真實的東西?

.並且..通常真實的目錄條目,儘管這是特定於文件系統的。無論如何,它們幾乎總是被呈現為好像它們是所有使用者程式碼的真實條目。許多軟體(不僅僅是rm)特例它們的行為是為了捕捉或防止失控或不受歡迎的遞歸。

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