我刚刚发现了一个令人困惑的错误:
rm: cannot remove `xxx/app/cache/prod': Directory not empty
Run Code Online (Sandbox Code Playgroud)
这是由以下命令引起的:
rm -rf $cache_dir/*
Run Code Online (Sandbox Code Playgroud)
其中$cache_dir
定义为xxx/app/cache
所以我认为它是这样的:rm
删除cache/prod
dir 中的所有内容,然后就在它尝试删除cache/prod
目录之前 - 另一个程序在其中创建了一个文件/目录,因此导致rm
失败。
我的假设正确吗?
给出的错误消息是“目录不为空”(ENOTEMPTY
),鉴于您的假设听起来是正确的,这是一种竞争条件,即程序在rm
尝试删除该目录之前在该目录中创建了一个文件,从而ENOTEMPTY
从基础rmdir(2)
.
注意:为了安全起见,您可以将目录移动/重命名为新名称,然后执行删除该目录的操作。