2017-01-19 56 views
5

假設我有一個S3桶命名x.y.z如何刪除S3鬥多個文件與AWS CLI

在這鬥,我有數百個文件。但我只是想刪除2檔名爲purple.gifworksheet.xlsx

我能用到rm單個呼叫做到這一點從AWS命令行工具?

這不起作用:

$ 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.gifworksheet.xlsx排除。

來源:Use of Exclude and Include Filters

0

我發現這個一個通過命令行是有用的。我有超過400萬個文件,花了將近一個星期的時間清空存儲桶。由於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