我刚抓到一个令人困惑的错误:
rm: cannot remove `xxx/app/cache/prod': Directory not empty
这是由以下命令引起的:
rm -rf $cache_dir/*
在哪里$cache_dir
定义为xxx/app/cache
所以我看到它像:rm
删除了cache/prod
dir中的所有内容,然后在尝试删除cache/prod
目录之前-另一个程序在其中创建了一个文件/目录,从而导致rm
失败。
我的假设正确吗?
@Johnny:是的,那是我实际上已经实施的方法:-)
—
zerkms 2013年
尽管那也不是完全安全的。如果某个应用当前不在该目录下运行,它将随其移动并保持正常运行。
—
帕特里克
这与
—
吉尔(Gilles)'所以
rm -rf
线程安全无关:如果您在同一目录上同时运行多次,该目录将被删除。这是关于rm -r
不是原子的。
@Gilles:它取决于:“如果一段代码仅以保证多个线程同时安全执行的方式操作共享数据结构,那么它就是线程安全的”。因此,如果我们将“线程”假定为
—
zerkms 2013年
rm
调用,那么我们可以谈论线程安全性。但是无论如何,它什么都不会改变
rm -r
不是原子的。如果要确保rm -rf
运行时在目录中没有创建更多文件,可以先重命名,然后删除重命名的目录。