我在Amazon S3上的存储桶events_logs
下有一个像/Download/test_queue1/
这样的文件夹结构。我想只删除对象并保留文件夹结构。有可能这样做吗?如何从Amazon S3中删除对象,而不是包含对象的子文件夹,使用python的boto库
所以,我想删除aa.txt
,bb.txt
& cc.txt
而不是/Download/test_queue1/
子文件夹结构。我怎么做?
/Download/test_queue1/aa.txt
/Download/test_queue1/bb.txt
/Download/test_queue1/cc.txt
这是我的代码,它正在清除桶下的所有东西。
def _deleteFileInBucket(self,s3_file1,aws_bucket_to_download,aws_bucket_path_to_download):
bucket_path = os.path.join(aws_bucket_path_to_download, s3_file1.strip())
if not re.match(r'.*\.tar\.gz', bucket_path):
print "No batch available to delete from {}".format(aws_bucket_path_to_download)
else:
bucket = self._aws_connection.get_bucket(aws_bucket_to_download)
bucket_list = bucket.list(prefix='Download/test_queue1')
bucket.delete_keys([key.name for key in bucket_list])`
我能够做到这一点使用AWS CLI:
os.system('aws s3 rm s3://{}{}'.format(aws_bucket_path_to_download[1:], s3_file1.strip()))
但我怎么能实现使用Boto程式库相同的结果?
为什么你想删除对象,但不是目录?如果你能解释它的使用方式,可能有更好的方法来实现你的目标。 –
我的目标是从增量的基础上从S3的'Download/test_queue1 /'位置下载对象。我下载对象并从相同的位置删除它们。所以,最好我想保留S3上的文件夹结构。 – Guddi
但是有没有一个真正的需要保留文件夹结构?另外,FYI也可以使用[AWS命令行界面(CLI)](http://aws.amazon.com/cli/),它具有'aws s3 sync'命令,它将同步文件往返于Amazon S3。这意味着您可以确保您拥有S3中的任何“本地”副本。所以,保持同步而不是下载和删除。 (这一切都取决于你的实际目标,因此这个问题。) –