厳密にはディレクトリではないのですが、この書き方のほうがイメージ伝わるだろうということで便宜上「ディレクトリ」と称します。
バケット内に/BUCKET_NAME/DIR_NAME/index.html
みたいな形でファイルを設置すること、よくありますよね。
少ないファイルであれば都度スクリプトや管理画面から指定して消せばいいのですが、StaticPressや絡新婦などのような別のプログラムからガンガンファイルを送ってこられるパターンだとどちらもかなりしんどいところがあります。
ということでJSでDIR_NAME
ディレクトリの中身ををまるごと削除するスクリプトです。
var aws = require('aws-sdk');
aws.config.update({
region:'us-east-1'
});
var s3 = new aws.S3({apiVersion: '2006-03-01'});
var bucket = 'YOUR_BUCKET_NAME';
var prefix = 'DIR_NAME';
var params = {
Bucket: bucket,
Prefix: prefix
};
s3.listObjectsV2(params).promise().then(
function(data){
console.log(data.Contents.length)
var deleteList = []
for (var i = 0; i < data.Contents.length; i++) {
var deleteSite = {
Key: data.Contents[i].Key
}
deleteList.push(deleteSite)
}
var params = {
Bucket: bucket,
Delete: {
Objects: deleteList
}
};
return s3.deleteObjects(params).promise()
}
).then(
function(data){
console.log(data);
}
).catch(
function(err){
console.log(err);
}
)
利用上の注意
ListObjectsV2で一度に取れるファイル数が1000件までです。
ですので1001件目以降については、もう一度このスクリプトを実行してもらわないと削除できないのでご注意ください。
そのうち1001件以降のファイルについても、まとめて消していけるスクリプトも紹介します。