当前位置: 首页 > 知识库问答 >
问题:

由于NFS升级后目录不为空,rmdir失败

郏佐
2023-03-14

我有一个网站,有一个资产目录。有时候我需要删除整个文件夹,以前在AWS上我有一个EC2和一个EBS存储,它工作得很好。

我现在正在测试EFS以跨多个实例共享资产。文件将被删除,但当它要删除目录时,会抛出一条警告,说明目录不是空的:

错误[警告]:rmdir(/path/):目录不为空

在查看文件系统时,目录是空的,因此我只能假设存在一些延迟。我已经加入了一个sleep函数,看看它是否作为一个测试修复了它,但它没有。

目录上的权限看起来正确,并且在保存/删除文件时没有问题。

是执行rm-rf命令的唯一选项吗?执行以下删除操作的代码:

public function delTree($dir) {
    $files = array_diff(scandir($dir), array('.','..')); 
    foreach ($files as $file) {
        (is_dir("$dir/$file")) ? $this->delTree($dir . $file . "/") : unlink("$dir/$file"); 
    }
    return rmdir($dir); 
}

共有1个答案

林波鸿
2023-03-14

这很可能意味着另一个进程在一个或多个文件上有一个锁。这可能是一个软件错误,文件没有正确关闭。

这可能适用于EBS而不适用于NFS的原因是处理删除文件的方式不同。

有可用的软件工具可以告诉您在文件系统上打开了哪些文件。使用这些工具之一来弄清楚发生了什么。通常您还可以看到具有打开文件的进程。

rm-rf很可能不起作用。f选项是“force”,这意味着更改只读文件的权限,以便将其删除。rm无法更改/删除文件系统锁。

 类似资料:
  • 我正在创建一个允许调整gif大小的小类。为此,我创建了一个包含所有帧的临时目录,调整它们的大小,然后再次创建gif。 创建gif后,我想删除我的临时目录。但一旦我的所有文件都被删除,我就会出现以下错误: 警告:目录不为空 这是我的密码: 这是我得到的: 正如您所看到的,没有隐藏文件,因为scandir没有返回任何文件<如你所见,我尝试了这个解决方案,但没有成功 我可以手动删除它,一旦代码完成,里面

  • 和 mkdir 命令(创建空目录)恰好相反,rmdir(remove empty directories 的缩写)命令用于删除空目录,此命令的基本格式为: [root@localhost ~]# rmdir [-p] 目录名 -p 选项用于递归删除空目录。 【例 1】 [root@localhost ~]#rmdir cangls 就这么简单,命令后面加目录名称即可,但命令执行成功与否,取决于要删

  • 分级项目同步失败,未从其他相关问题中获得答案。以下是我的详细情况。 初始同步尝试产生以下错误消息: 我有Android Studio 3.0。build.gradle文件包含以下依赖项: 根据https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#update_gradle我需要做一些改变 首先,在

  • 方法一:利用BIOS Boot Block引导块 现在用Award BIOS的主板都有一个BIOS引导块,当你升级BIOS时,这一小部分引导块可以不被覆盖(BootBlock Write 跳线设置为“Disable”,并且在运行Flash程序时,不选择“UpdateBIOS Including Boot Block”方式)。这个BIOS引导块只支持软驱和ISA显示卡,所以很多人在升级BIOS失败后

  • 我有一个创建子文件夹的代码,但如果子文件夹已经存在,则首先删除它。我用的是Octave3。6.4_gcc4。6.2用于Win7 pro机器上的MinGW。我注意到,如果子文件夹存在并且包含多个文件,mkdir将失败。在执行下一行代码之前,rmdir似乎还没有在后台完成。下面是测试代码的示例。 下面是子文件夹不存在时的倍频结果。这和预期的一样。 下面是子文件夹存在且为空时的倍频程结果。这正如预期的那