2016-11-03 2 views
1

オブジェクトキーの一部しか持たない場合、S3オブジェクトを検索/削除できますか?オブジェクトキーの部分文字列に基づいてS3オブジェクトを検索/削除します

シナリオ:拡張子.jpegとキー全体ではなく、私はこのオブジェクトを削除する必要がありますが、私は唯一の123123を知っている:は(mybucketバケット名)ユーザーストア123123.jpegはS3で言ってみましょう。

私たちはプレフィックスに基づいてバケット内のオブジェクトを見つけることができることを承知しているが、オブジェクトは例えば、バケット内のパスに存在する場合私の知る限り、これはのみ適用されます。mybucket/imgpath/123123.jpeg

+0

この質問をチェック:http://stackoverflow.com/questions/8027265/how-to-list-all-aws-s3-objects-in-a-bucket-using-java –

答えて

1

あなたは、ブルートフォースを使用することができます。

List<String> matchingKeys = new ArrayList<>(); 
Predicate<String> predicate = Pattern.compile(".*/" + filename + "\\.\\w+").asPredicate(); 
for (ObjectListing listing = s3.listObjects(bucketName, "/");; listing = s3.listNextBatchOfObjects(listing)) { 
    listing.getObjectSummaries().stream() 
     .map(S3ObjectSummary::getKey) 
     .filter(predicate) 
     .forEach(matchingKeys::add); 
    if (!listing.isTruncated()) { 
     break; 
    } 
} 

代わりにヒットを集めるのは、あなただけ削除できます。

.forEach(key -> s3.deleteObject(bucketName, key)); 

注:これは、正規表現のsuを使用しています拡張子のないファイル名を指定してキーを見つけるというシナリオでは可能ですが、必要に応じて正規表現を調整できます。例えば、サブそのキーで任意の場所にを持っているすべてのキーを見つける正規表現を使用するように

".*" + substring ".*" 

または大文字と小文字を区別しません

"(?i).*" + substring ".*" 

など

免責事項:コードがないかもしれませんコンパイルしたり、私の電話機で親指で押されたように動作します(しかし、それはうまくいくでしょう)。

関連する問題