Linux

為什麼find如此喜歡statfstat

  • November 8, 2015

我試圖在/usr/bin/find不做任何事情的情況下展示一些有意義的東西stat,到目前為止還沒有有用的結果。如果我強行抑制stat, find 將完全停止下降到子目錄。

正如getdents係統呼叫手冊頁所說,那裡有d_type欄位,所以find應該已經有一些決策所需的資訊。

為什麼需要stat不管-L-H或任何選項。

使用來源,盧克!

在 GNUfind原始碼(我正在查看版本 4.2.2)中,遍歷目錄樹的程式碼位於gnulib/lib/fts.c. 在第 1123 行有以下註釋:

記錄 fts_read 與該條目的關係。在很多情況下,它只會簡單地 fts_stat 它,但我們可以利用任何 d_type 資訊來優化掉不必要的 stat 呼叫。即,如果 FTS_NOSTAT 生效並且我們沒有遵循符號連結 (FTS_PHYSICAL) 並且 d_type 表明這不是一個目錄,那麼我們根本不需要統計它。如果一個目錄,然後(目前)我們無論如何都要統計它,以便獲取設備和 inode 編號。有一天,我們也可能會針對已知 d_ino 有效的目錄進行優化。

所以他們想到了你描述的優化,但沒有實現。

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