2017-01-19 5 views
5

Предположим, что у меня есть ведро S3 с именем x.y.zКак удалить несколько файлов в S3 ведро с AWS CLI

В этом ведре, у меня есть сотни файлов. Но я хочу удалить только 2 файла с именем purple.gif и worksheet.xlsx

Могу ли я сделать это с помощью инструмента командной строки AWS одним звонком до rm?

Это не сработало:

$ aws s3 rm s3://x.y.z/worksheet.xlsx s3://x.y.z/purple.gif 
Unknown options: s3://x.y.z/purple.gif 

С manual, это не кажется, что вы можете удалить список файлов, явно именем. Кто-нибудь знает, как это сделать? Я предпочитаю не использовать флаг --recursive.

ответ

7

Вы не можете с помощью s3 rm, но вы можете с помощью s3api delete-objects:

aws s3api delete-objects --bucket x.y.z --delete '{"Objects":[{"Key":"worksheet.xlsx"},{"Key":"purple.gif"}]}' 
+0

работает как шарм :) –

5

Вы можете сделать это путем обеспечивать --exclude или --include аргумент несколько раз. Но для этого вам придется использовать --recursive.

Если есть несколько фильтров, помните, что очень важен порядок параметров фильтра. Правило - это фильтры, которые появляются позже в команде, имеют приоритет над фильтрами, которые появляются ранее в команде.

aws s3 rm s3://x.y.z/ --recursive --exclude "*" --include "purple.gif" --include "worksheet.xlsx" 

Здесь все файлы будут исключены из команды для purple.gif и worksheet.xlsx исключением.

Источник: Use of Exclude and Include Filters

0

Я нашел это полезное через командную строку. У меня было более 4 миллионов файлов, и для освобождения ведра потребовалось почти неделю. Это удобно, поскольку консоль AWS не описана в журналах.

Примечание: Вам необходимо JQuery установлен

aws s3api list-object-versions --bucket YOUrBUCKEtNAMeHERe-processed --output json --query 'Versions[].[Key, VersionId]' | jq -r '.[] | "--key '\''" + .[0] + "'\'' --version-id " + .[1]' | xargs -L1 aws s3api delete-object --bucket YOUrBUCKEtNAMeHERe