2017-01-19 33 views
5

Załóżmy Mam wiadro S3 nazwie x.y.zJak usunąć wiele plików w S3 wiadra z AWS CLI

W tym wiadrze, mam setki plików. Ale chcę tylko usunąć dwa pliki o nazwach purple.gif i worksheet.xlsx

Czy mogę to zrobić z narzędzia wiersza poleceń AWS z pojedynczym wywołaniem do rm?

To nie działa:

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

Z manual, to nie wydaje się jak można usunąć listę plików wyraźnie po imieniu. Czy ktoś wie, jak to zrobić? Wolę nie używać flagi --recursive.

Odpowiedz

7

Nie można przy użyciu s3 rm, ale można za pomocą s3api delete-objects:

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

działa jak marzenie :) –

5

Można to zrobić poprzez dostarczenie --exclude lub --include argumentów wielokrotnie. Ale musisz użyć --recursive, aby to działało.

W przypadku wielu filtrów należy pamiętać, że kolejność parametrów filtru jest ważna pod . Reguła jest taka, że ​​filtry pojawiające się później w komendzie mają pierwszeństwo przed filtrami pojawiającymi się wcześniej w komendzie.

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

Tutaj wszystkie pliki zostaną wyłączone z polecenia z wyjątkiem purple.gif i worksheet.xlsx.

Źródło: Use of Exclude and Include Filters

0

Znalazłem jedną użyteczną poprzez linię poleceń. Miałem ponad 4 miliony plików i opróżnienie wiadra zajęło prawie tydzień. Jest to przydatne, ponieważ konsola AWS nie jest opisowa dla dzienników.

Uwaga: Musisz jquery zainstalowany

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