Удалить объект S3 на основе имени файла - PullRequest
0 голосов
/ 08 января 2020

Я хочу удалить все файлы, содержащие ключевое слово «update», из корзины S3. Следующий скрипт правильно считывает файлы, содержащие «update», но команда Remove-S3Object удалит папку и все файлы в папке, а не только файлы, содержащие «update».

Set-AWSCredentials -AccessKey $s3AccessKey -SecretKey $s3SecretKey

$s3Contents = (Get-S3Object -BucketName "$s3Bucket" -Key "path/test/" -AccessKey $s3AccessKey -SecretKey $s3SecretKey).Key
Write-Host 'Here are the contents' $s3Contents -ForegroundColor Green

foreach($x in $s3Contents){
    If($x -like '*Update*'){
            (Remove-S3Object -BucketName "$s3Bucket" -Key "$x" -AccessKey $s3AccessKey -SecretKey $s3SecretKey).key
    }
}

Полный файл пути следующие:

Path/user/tier1/manual-retouch/test/File1.UPDATE.jpg
Path/user/tier1/manual-retouch/test/File2.Work.jpg
Path/user/tier1/manual-retouch/test/File3.jpg

Если я добавлю -Whatif к Remove-S3Object, я получу следующее возвращение:

What if: Performing the operation "Remove-S3Object (DeleteObjects)" on target "".

Однако без -Whatif скрипт powershell подскажет мне Are you sure you want to perform this action? Performing the operation "Remove-S3Object (DeleteObjects)" on target "". 4 раза и удалит все там файлы и папку.

Может кто-нибудь указать, что я делаю неправильно?

1 Ответ

1 голос
/ 09 января 2020

Key (имя файла) объекта Amazon S3 включает полный путь.

Вот пример ключей:

foo.txt
foo-update.txt
invoices/bar.txt
invoices/bar-update.txt
to-be-updated/grok.txt

Последняя строка показывает объект внутри папка называется to-be-updated. Реальность такова, что папка на самом деле не существует. Скорее, ключ (имя файла) объекта - to-be-updated/grok.txt.

Таким образом, если ваш код удаляет любой объект, имеющий update в своем ключе, то он удалит все объекты в папке to-be-updated/ .

Также обратите внимание, что папки не существуют. Поэтому, когда последний объект удаляется из «папки», папка больше не появляется. Ничего страшного в этом нет. Он автоматически появится снова, когда объект будет снова помещен в этот путь.

(Если вы создали папку в консоли управления S3, она фактически создает объект нулевой длины с именем папки. Ваш код будет удалите этот объект, если он содержит слово update, что является еще одной причиной, по которой папка будет удалена.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...