2014-03-26 174 views
22

我正在使用亚马逊S3的Web界面,当我右键单击某个文件夹X并选择删除时,X似乎被删除。然后当我刷新界面时,X可能会消失或保持;如果我继续单击刷新,该文件夹可能丢失或存在。这是一个错误,还是我做错了什么?据我所知,文件夹仍然存在;我的一个EMR作业抱怨输出文件夹X仍然存在。无法从Amazon S3中删除目录

+0

删除它,你双重检查?导致它不发生在我的情况 – rsudip90

+0

你有没有想过这个?因为这个空CloudFront的/文件夹坐在那里,我不能运行在我的CloudFront的访问日志我的EMR的工作...... –

+1

您是否尝试过使用AWS CLI和调用'AWS S3 RM S3://你的桶/ CloudFront的/' ?另一件要检查的是EMRFS元数据表。这些'cloudfront'文件夹中有密钥吗? – verve

回答

34

在AWS命令行(CLI)删除存储桶中的“递归”文件夹之后,我在AWS Web界面中遇到了同样的问题。一些对象在Web界面中随机出现(不是文件,但实际上是“文件夹”)。尽管我试图删除Web界面中的这些文件夹,但它们仍然存在(接口说操作成功......)

在AWS Web界面中为我工作的解决方案:右键单击文件夹 - > CUT和粘贴到另一个文件夹中。工作很好,然后删除新的文件夹。走了!

+1

工作就像一个魅力。泰:) –

+1

这个工作,但您需要取消对原始文件夹 – RickyA

+0

以往任何删除操作的问题是荒谬的,仍然存在(随机发生的),这解决方案确实可行!相信与否我甚至改变了我的程序,检查在S3上删除对象(文件夹/文件)是否仍然存在,并将其作为解决方法! AWS需要解决这个问题! – Fr0zenFyr

8

S3实际上并未使用文件夹。而是将对象路径中的路径分隔符视为文件夹。如果你想删除一个文件夹,该文件夹的所有内容将不得不被删除。

如果删除所有内容有任何延迟,文件夹可能会继续存在。

+0

为了详细说明,该文件夹可以在Web界面继续下去,直到你刷新,现在空文件夹的内容,通过导航进入然后离开文件夹。 – congusbongus

+0

所以你不能通过删除文件夹/前缀删除“文件夹”和该前缀下的所有内容?似乎很奇怪.. – mmcrae

+0

这个答案是错误的,因为它可以创建和保留空的“文件夹”。否则按钮'action-> create folder'会是什么? – RickyA

2

我想我看到了类似的行为。我的存储桶已打开版本控制;即使在存储桶中有一个空的文件夹/目录,试图通过AWS Web UI控制台“删除”存储桶中的文件夹/目录也不会导致它实际被删除。我认为该路径中文件的“已删除”版本仍然存在(但在Web控制台中不可见),因此该存储桶并非真正为空,而且并未真正被删除。您可能需要通过CLI工具检查该文件夹/目录中是否存在已删除的文件版本(但在Web控制台中不可见),并永久删除这些文件,然后尝试删除存储桶中的文件夹/目录。

6

截至2017年3月,AWS控制台界面已更改,您不能再进入旧版文章中描述的“版本控制模式”。

看来现在使用版本化文件的文件夹可以自由删除而不受限制。

如果不是这种情况,请发表评论,以便我能更正此帖。


AWS的早期版本控制台

如果您正在使用AWS管理控制台,你已经打开了版本ON ,你必须在“版本模式”删除文件夹。 通过转到页面顶部并在'Versions:'的位置旁边输入'版本控制模式',选择显示按钮。然后,您可以继续右键单击并删除您的文件夹。 希望这可以帮助别人。

2

尝试了各种替代方法从Web界面删除删除一个文件夹中的子文件夹没有运气。 我有一个S3浏览器的安装,然后尝试从S3浏览器界面,工作。

+0

我也无法删除该文件夹。我认为这是因为,从代码中,我无意中以格式文件夹/文件名创建了一个文件,然后删除了该文件。所以,该文件夹从未真正创建过。我尝试了Manoj解决方案 - 即使用S3浏览器,这是我的案例中唯一的解决方案。 –

10

尝试与Kristoffer的answer相同,但CUT /粘贴到另一个文件夹使新文件夹不可删除。

进一步黑客:创建一个新的临时记录。 CUT /粘贴文件夹到此存储区并删除存储区

+1

谢谢,我不得不剪切/粘贴到一个新的临时存储桶,否则会发生错误 – Manube

+1

新的存储桶也适用于我。所有其他解决方案都挂了。 – nickdnk

-1

尝试使用新的S3控制台。删除功能适用于文件夹。

-1

有一个“弹性豆茎”斗而不得不删除“斗政策”,将删除之前。

必能

0

我有同样的问题,并没有进入亚马逊控制台,但我可以用这个Java代码

AmazonS3Client amazonS3Client = new AmazonS3Client(basicAWSCredentials); 
    ObjectListing objectListing = amazonS3Client.listObjects("bucketName", "prefix"); 
    DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest("bucketName"); 
    List<DeleteObjectsRequest.KeyVersion> keysToDelete = new ArrayList<>(); 
    objectListing.getObjectSummaries().forEach(s3ObjectSummary -> { 
     keysToDelete.add(new DeleteObjectsRequest.KeyVersion(s3ObjectSummary.getKey())); 
    }); 
    deleteObjectsRequest.setKeys(keysToDelete); 
    amazonS3Client.deleteObjects(deleteObjectsRequest); 

<dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-java-sdk</artifactId> 
     <version>1.7.4</version> 
    </dependency>