Rm

du 無法訪問文件 - 沒有此類文件或目錄錯誤

  • June 28, 2014

我在特定文件夾中有很多子文件夾,而這些子文件夾又包含許多較小的文件。它們是以程式方式創建的,所以我不知道裡面有多少。

我決定刪除所有這些子文件夾和文件,所以我發出了命令,

rm -rf foldername/

但是, rm 命令需要很長時間才能執行,我認為這是完全正常的,因為它必須取消連結所有文件。

但是,我決定通過發出命令來檢查這個文件夾的大小是否變小了,

du -sh foldername/

但是,上面的命令給了我錯誤,

du: cannot access `foldername/file': No such file or directory

為什麼會發生此錯誤?

du,就像任何遞歸遍歷目錄樹的命令一樣,以以下方式執行:

  1. 讀取有關文件的資訊,通過其路徑訪問¹。在 的情況下du,系統呼叫stat提供文件類型(特別是,是否是目錄)和大小。最初,名稱取自命令行。
  2. 如果文件是目錄,打開它並讀取文件名列表。
  3. 對於目錄中的每個文件名,構造一個文件路徑(*DIRECTORY*/*ENTRY_NAME*

rm正在執行並一一刪除文件。有時,du在第 2 步中讀取文件名,但在第 3 步處理它時,rm已將其刪除。您是否看到此錯誤以及看到多少次取決於 和 的相對速度,rm並且du幾乎是不可預測的。

¹ 直接訪問文件只有兩種方式:通過路徑(包括目錄資訊,相對或絕對),或(如果文件已打開)通過描述符。

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