我正在尝试删除因 MapReduce 作业而创建的文件夹。桶中的其他文件删除就好了,但是这个文件夹不会删除。当我尝试从控制台中删除它时,其状态旁边的进度条仅停留在 0。已进行了多次尝试,包括介于两者之间的注销/登录。
5 回答
我遇到了同样的问题并使用 AWS CLI 修复它:
aws s3 rm s3://<your-bucket>/<your-folder-to-delete>/ --recursive ;
(这假设您已经运行aws configure
并且aws s3 ls s3://<your-bucket>/
已经工作)
首先,Amazon S3实际上并没有文件夹/目录的原生概念,而是一个仅由存储桶和对象/键组成的平面存储架构——在大多数 S3 工具(包括AWS 管理控制台)中看到的目录样式表示本身)仅基于约定,即模拟具有相同前缀的对象的层次结构-请参阅我对如何指定与目录不匹配的对象过期前缀的回答?有关此架构的更多详细信息,包括 AWS 文档中的引用/参考。
因此,您的问题可能源于使用不同约定来模拟此层次结构的工具,例如,请参阅 AWS 论坛中的以下答案:
Ivan Moiseev 对相关问题的回答Cannot delete file from bucket,他建议使用其他工具检查您是否可能遇到此类问题并进行相应的补救。
AWS 团队对这些 _$folder$ 对象是什么的回应?-这是包括 Hadoop 在内的许多工具用来在 S3 中创建目录的约定。它们主要用于指定空目录。人们可能更喜欢更美观的方案,但这就是这些工具的方式。
祝你好运!
当我尝试删除一个存储桶时,我收到了以下错误,该存储桶是一个保存来自 Cloudfront 的日志文件的目录。
An unexpected error has occurred. Please try again later.
在我禁用 Cloudfront 登录后,我能够成功删除该文件夹。
我的猜测是它是 Cloudfront 使用的系统文件夹,不允许所有者删除。
在您的情况下,您可能需要检查 MapReduce 是否保留了相关文件夹。
我面临着同样的问题。尝试了许多登录、注销尝试和刷新,但问题仍然存在。搜索stackoverflow并找到在不同文件夹中剪切和粘贴文件夹然后删除但没有用的建议。您应该寻找的另一件事是可能会影响您的存储桶的版本控制可能会暂停版本控制,允许您删除文件夹。
我的解决方案是用代码删除它。我在 python 中使用 boto 包来处理 s3 上的文件,当我尝试从我的 python 代码中删除该文件夹时,删除工作有效。
import boto
from boto.s3.key import Key
keyId = "your_aws_access_key"
sKeyId = "your_aws_secret_key"
fileKey="dummy/foldertodelete/" #Name of the file to be deleted
bucketName="mybucket001" #Name of the bucket, where the file resides
conn = boto.connect_s3(keyId,sKeyId) #Connect to S3
bucket = conn.get_bucket(bucketName) #Get the bucket object
k = Key(bucket,fileKey) #Get the key of the given object
k.delete() #Delete
S3 不保留目录,它只有一个平面文件结构,所以一切都用密钥管理。对你来说它是一个文件夹,但对 S3 来说它只是一个键。
如果你想删除一个名为 -> dummy 的文件夹,那么关键是
fileKey = "/dummy/"
首先,从getBucket
方法中读取目录的内容,然后得到所有文件的数组列表,然后从deleteObject
方法中删除文件。
if (($contents = $this->S3->getBucket(AS_S3_BUCKET, "file_path")) !== false)
{
foreach ($contents as $file)
{
$result = $this->S3->deleteObject(AS_S3_BUCKET,$file['name']);
}
}
$this->S3
是 S3 类对象,AS_S3_BUCKET
是存储桶名称。