我正在尝试删除一个由MapReduce作业创建的文件夹。存储桶中的其他文件可以轻松删除,但是这个文件夹无法删除。当我尝试从控制台删除它时,其状态旁边的进度条仍然停留在0。已经进行了多次尝试,包括在注销/登录之间。
我正在尝试删除一个由MapReduce作业创建的文件夹。存储桶中的其他文件可以轻松删除,但是这个文件夹无法删除。当我尝试从控制台删除它时,其状态旁边的进度条仍然停留在0。已经进行了多次尝试,包括在注销/登录之间。
我曾遇到同样的问题,使用 AWS CLI 进行修复:
aws s3 rm s3://<your-bucket>/<your-folder-to-delete>/ --recursive ;
(这假定您已经运行了 aws configure
和 aws s3 ls s3://<your-bucket>/
命令已经可以正常工作)
folder:
(注意末尾的冒号)的无效名称文件夹时,这对我非常有效,因为我无法使用Cyberduck删除它。 - Cyclonecode--region
或 --profile
。aws s3 ls --region us-east-1 --profile default
是一个很好的测试,可以检查你是否能够连接(假设你已经运行了 aws configure
并且在 AWS 上设置了你的权限)。 - sonjz因此,你的问题可能源于使用不同惯例模拟此层次结构的工具,例如 AWS 论坛中的以下答案:
Ivan Moiseev建议使用其他工具检查是否存在文件删除问题并相应解决,他在相关问题Cannot delete file from bucket的答案中提到。
AWS团队针对What are these _$folder$ objects的回答是- 这是许多工具(包括Hadoop)用来在S3中创建目录的约定。它们主要用于指定空目录。也许有人更喜欢更美观的方案,但这就是这些工具的方式。
祝好运!
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/"
An unexpected error has occurred. Please try again later.
在我禁用了Cloudfront的日志记录后,我成功地删除了该文件夹。
我猜测这是由于Cloudfront使用的系统文件夹不允许所有者删除。
在你的情况下,你可能需要检查MapReduce是否占用了相关文件夹。
首先,从 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
是存储桶名称。