请考虑以下命令:
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
Run Code Online (Sandbox Code Playgroud)
为什么rmdir最后一步会失败?为什么它试图删除非空 $HOME而不是停止?
这是什么man rmdir说:
--ignore-fail-on-non-empty
忽略每个仅因为目录非空而导致的失败
即除了目录为空之外,由于其他错误而无法删除目录,仍将报告。
由于普通用户通常没有足够的权限进行修改/home(包括删除他们自己的主目录),因此rmdir在调用时会遇到“权限被拒绝”错误。
您可以通过尝试轻松确认这一点:
rmdir ~
Run Code Online (Sandbox Code Playgroud)
这将导致:
rmdir: failed to remove '/home/youruser': Permission denied
Run Code Online (Sandbox Code Playgroud)