為什麼遞歸不與rm一起向上?
我想知道一般的遞歸方向,特別是 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 ‘.’
(該消息來自 GNU
rm
;其他類似)。當它隱含地遇到這些條目時,而不是作為顯式參數,它只是忽略它們並繼續。POSIX 需要這種行為。在 GNUrm
和許多 BSD 中,它由fts_read
一系列層次遍歷函式自動提供。或者
.
和..
不是真實的東西?
.
並且..
通常是真實的目錄條目,儘管這是特定於文件系統的。無論如何,它們幾乎總是被呈現為好像它們是所有使用者程式碼的真實條目。許多軟體(不僅僅是rm
)特例它們的行為是為了捕捉或防止失控或不受歡迎的遞歸。