文件夹似乎存在于操作系统中,但在"sudo rm-rf dirname"时会无声地失败



我试图删除一个文件夹,但没有成功。我是sudo,拥有所有权限。

cd /path/to/parent

ls

001  003  005  007  009  011  013  015  017  019  021                 dent_detections_3d.ply      dent_spread_debug.png             paint_chip_spread_debug.png
002  004  006  008  010  012  014  016  018  020  _det__grouped.json  dent_detections_debug.json  paint_chip_detections_debug.json

我想删除有问题的文件夹003。其他文件夹运行正常。

观察结果:

  1. cd 003给出-bash: cd: 003: No such file or directory
  2. sudo rm -rf 003sudo rm -rf 003/给出空输出,则ls给出与上述相同的输出(存在003(
python
> import os
> path.os.exists("path/to/parent")
>> True
> path.os.exists("path/to/parent/003")
>> False
> os.mkdir("path/to/parent/003")
>> 
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 17] File exists: '/path/to/parent/003'

是什么原因造成的?如何调试?我希望删除文件夹,并且我希望这种情况不再发生。


编辑以回答评论:

> ls -la
total 6144
drwxr-xr-x 2 noam root      0 Dec 28 13:28 .
drwxr-xr-x 2 noam root      0 Dec  9 18:41 ..
drwxr-xr-x 2 noam root      0 Dec 28 13:28 001
drwxr-xr-x 2 noam root      0 Dec 28 13:28 002
drwxr-xr-x 2 noam root      0 Dec 28 13:28 003
drwxr-xr-x 2 noam root      0 Dec 28 13:26 004
drwxr-xr-x 2 noam root      0 Dec 28 13:26 005
drwxr-xr-x 2 noam root      0 Dec 28 13:26 006
drwxr-xr-x 2 noam root      0 Dec 28 13:26 007
drwxr-xr-x 2 noam root      0 Dec 28 13:26 008
drwxr-xr-x 2 noam root      0 Dec 28 13:26 009
drwxr-xr-x 2 noam root      0 Dec 28 13:26 010
drwxr-xr-x 2 noam root      0 Dec 28 13:26 011
drwxr-xr-x 2 noam root      0 Dec 28 13:26 012
drwxr-xr-x 2 noam root      0 Dec 28 13:26 013
drwxr-xr-x 2 noam root      0 Dec 28 13:26 014
drwxr-xr-x 2 noam root      0 Dec 28 13:26 015
drwxr-xr-x 2 noam root      0 Dec 28 13:26 016
drwxr-xr-x 2 noam root      0 Dec 28 13:26 017
drwxr-xr-x 2 noam root      0 Dec 28 13:26 018
drwxr-xr-x 2 noam root      0 Dec 28 13:26 019
drwxr-xr-x 2 noam root      0 Dec 28 13:26 020
drwxr-xr-x 2 noam root      0 Dec 28 13:26 021
-rwxr-xr-x 1 noam root 684753 Dec 12 11:58 _det__grouped.json
-rwxr-xr-x 1 noam root   7604 Dec 12 11:58 dent_detections_3d.ply
-rwxr-xr-x 1 noam root  89902 Dec 12 11:58 dent_detections_debug.json
-rwxr-xr-x 1 noam root 377863 Dec 12 11:58 dent_spread_debug.png
-rwxr-xr-x 1 noam root     24 Dec 12 11:58 paint_chip_detections_debug.json
-rwxr-xr-x 1 noam root 362525 Dec 12 11:58 paint_chip_spread_debug.png

EDIT2,其中包含竞赛条件是问题的信息

创建文件夹的相关代码块:

if os.path.exists(cluster_folder_path):
shutil.rmtree(cluster_folder_path)
os.mkdir(cluster_folder_path)

将EDIT2中的代码更改为

while os.path.exists(cluster_folder_path):
shutil.rmtree(cluster_folder_path)
os.mkdir(cluster_folder_path)

在继续创建文件夹之前,强制将其实际删除,从而防止了竞争条件。

我不明白为什么这种情况只发生在一个文件夹上,或者为什么这个文件夹而不是其他文件夹。我也不明白为什么在Python还没有运行的情况下,这种情况一直在发生。

将接受一个能够解释这一点的答案。

最新更新