Coreutils

為什麼遇到 $HOME 時 ‘rmdir -p –ignore-fail-on-non-empty’ 會失敗?

  • January 15, 2022

請考慮以下命令:

cd /
mkdir -p ~/a/b
touch ~/a/content
# Removes dir 'b' and stops at 'a' because it's non-empty.
# (This is the expected behavior.)
rmdir -p --ignore-fail-on-non-empty ~/a/b

rm ~/a/content
mkdir -p ~/a/b
# Fails with error: "rmdir: failed to remove directory '/home/myhome'".
rmdir -p --ignore-fail-on-non-empty ~/a/b

為什麼rmdir最後一步失敗?為什麼它會嘗試刪除非空 $HOME而不是停止?

這裡是man rmdir說:

–ignore-fail-on-non-empty

忽略每個因為目錄非空而導致的失敗

即由於某些其他錯誤而無法刪除目錄,除了它是空的,仍然會報告。

並且由於普通使用者通常沒有足夠的權限進行修改/home(包括刪除他們自己的主目錄),因此rmdir在這樣呼叫時只會遇到“權限被拒絕”錯誤。

您可以通過嘗試輕鬆確認這一點:

rmdir ~

這將導致:

rmdir: failed to remove '/home/youruser': Permission denied

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