S3には次のフォルダー構造があります。特定のフォルダーの下にあるすべてのファイルを再帰的に削除する方法はありますか ( foo/bar1 or foo or foo/bar2/1
..)
foo/bar1/1/..
foo/bar1/2/..
foo/bar1/3/..
foo/bar2/1/..
foo/bar2/2/..
foo/bar2/3/..
S3には次のフォルダー構造があります。特定のフォルダーの下にあるすべてのファイルを再帰的に削除する方法はありますか ( foo/bar1 or foo or foo/bar2/1
..)
foo/bar1/1/..
foo/bar1/2/..
foo/bar1/3/..
foo/bar2/1/..
foo/bar2/2/..
foo/bar2/3/..
最新のaws-cli python コマンド ライン ツールを使用して、バケット内のフォルダーの下にあるすべてのファイルを再帰的に削除するには、次のようにします。
aws s3 rm --recursive s3://your_bucket_name/foo/
または、バケットの下のすべてを削除します。
aws s3 rm --recursive s3://your_bucket_name
実際にバケットを削除したい場合は、1 ステップのショートカットがあります。
aws s3 rb --force s3://your_bucket_name
そのバケットの内容を再帰的に削除してから、バケットを削除します。
注:s3://
これらのコマンドが機能するには、プロトコル プレフィックスが必要です。
これには、キー (ファイル) ごとに専用の API 呼び出しが必要でしたが、 2011 年 12 月にAmazon S3 - Multi-Object Deleteが導入されたため、大幅に簡素化されました。
Amazon S3 の新しいマルチオブジェクト削除では、1 回のリクエストで S3 バケットから最大 1000 個のオブジェクトを削除できます。
関連する質問delete from S3 using api php using wildcardに対する私の回答を参照して、これと PHP でのそれぞれの例を確認してください (バージョン 1.4.8以降、 AWS SDK for PHPはこれをサポートしています)。
一方、ほとんどの AWS クライアント ライブラリは、何らかの方法でこの機能の専用サポートを導入しています。たとえば、次のようになります。
AWS への優れたboto Python インターフェイスを使用して、大まかに次のようにこれを実現できます (私の頭の上から、テストされていません)。
import boto
s3 = boto.connect_s3()
bucket = s3.get_bucket("bucketname")
bucketListResultSet = bucket.list(prefix="foo/bar")
result = bucket.delete_keys([key.name for key in bucketListResultSet])
これはAWS SDK for Rubyのバージョン 1.24以降で利用でき、リリースノートにも例が示されています。
bucket = AWS::S3.new.buckets['mybucket']
# delete a list of objects by keys, objects are deleted in batches of 1k per
# request. Accepts strings, AWS::S3::S3Object, AWS::S3::ObectVersion and
# hashes with :key and :version_id
bucket.objects.delete('key1', 'key2', 'key3', ...)
# delete all of the objects in a bucket (optionally with a common prefix as shown)
bucket.objects.with_prefix('2009/').delete_all
# conditional delete, loads and deletes objects in batches of 1k, only
# deleting those that return true from the block
bucket.objects.delete_if{|object| object.key =~ /\.pdf$/ }
# empty the bucket and then delete the bucket, objects are deleted in batches of 1k
bucket.delete!
または:
AWS::S3::Bucket.delete('your_bucket', :force => true)
また、Amazon S3ライフサイクルを使用して、プレフィックスが。のファイルの有効期限を作成することを検討することもできますfoo/bar1
。
S3ブラウザコンソールを開き、バケットをクリックします。次に、[プロパティ]、[ライフサイクル]の順にクリックします。
プレフィックスfoo/bar1
を付けてすべてのファイルの有効期限ルールを作成し、ファイルが作成されてから1日に日付を設定します。
保存すると、一致するすべてのファイルが24時間以内に削除されます。
完了したら、ルールを削除することを忘れないでください。
API呼び出し、サードパーティのライブラリ、アプリ、スクリプトはありません。
この方法で数百万のファイルを削除しました。
ライフサイクルルールウィンドウを示すスクリーンショット(このショットでは、プレフィックスが空白のままになっているため、バケット内のすべてのキーに影響します):
パッケージを Linux マシンにインストールすると、これs3cmd
を実行できます。
s3cmd rm s3://foo/bar --recursive
ruby V2にAWS-SKDを利用する場合。
s3.list_objects(bucket: bucket_name, prefix: "foo/").contents.each do |obj|
next if obj.key == "foo/"
resp = s3.delete_object({
bucket: bucket_name,
key: obj.key,
})
end
バケツ配下の「foo/*」は全て削除されますのでご注意ください。
Amazon が「バケットを空にする方法」オプションを AWS コンソール メニューに追加したことを確認しました。
http://docs.aws.amazon.com/AmazonS3/latest/UG/DeletingaBucket.html
PowerShell を使用して、バケットからすべてのファイルを削除しました。
Get-S3Object -BucketName YOUR_BUCKET | % { Remove-S3Object -BucketName YOUR_BUCKET -Key $_.Key -Force:$true }
特定のフォルダの下にあるオブジェクトのすべてのバージョンを削除するには:
/folder/subfolder/
プレフィックスへのパスを渡します -
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket("my-bucket-name")
bucket.object_versions.filter(Prefix="foo/bar1/1/").delete()