2016-08-19 84 views
-1

bash腳本被 下面的腳本之前的工作傳出後一個乾淨的安裝 AWS命令行界面安裝和AWS配置S3對象不作爲循環期待

當它不是通過每個文件的循環?

## variables are set before this point 
files=$(/usr/local/bin/aws s3api list-objects --bucket "$bucket" --prefix "$target_zipname" --query "Contents[].{Key: Key}") 

##return sample## 
# [ { "Key": "fmpbks_2016_08_18_17_08_35.zip" }, { "Key": "fmpbks_2016_08_18_17_14_39.zip" }, { "Key": "fmpbks_2016_08_19_10_54_24.zip" }, { "Key": "fmpbks_2016_08_19_10_55_57.zip" }, { "Key": "fmpbks_2016_08_19_10_56_29.zip" }, { "Key": "fmpbks_2016_08_19_11_00_56.zip" } ] 
## 
for zip_file in $files 
do 
echo $zip_file # for testing 
delete_path="s3://$bucket/$zip_file" 
deleted=$(/usr/local/bin/aws s3 rm $delete_path) 
break 
done 

輸出:

[ 
{ 
"Key": 
"fmpbks_2016_08_18_17_08_35.zip" 
}, 
{ 
"Key": 
"fmpbks_2016_08_18_17_14_39.zip" 
}, 
{ 
"Key": 
"fmpbks_2016_08_19_10_54_24.zip" 
}, 
{ 
"Key": 
"fmpbks_2016_08_19_10_55_57.zip" 
}, 
{ 
"Key": 
"fmpbks_2016_08_19_10_56_29.zip" 
}, 
{ 
"Key": 
"fmpbks_2016_08_19_11_00_56.zip" 
} 
] 

回答

0

aws s3api list-buckets命令默認返回一個JSON對象for循環不瞭解如何解釋JSON。

使用--output text選項列出單獨的行上的每個文件:

files=$(aws s3api list-objects --bucket MY-BUCKET --query 'Contents[*].Key' --output text) 

順便說一句,如果你的目標是刪除某個路徑中的所有文件,可以使用:

aws s3 rm s3://MY-BUCKET --exclude "*" --include "MY-PREFIX*" --recursive 
+0

非常感謝,解決它。這是一個備份系統,我每天壓縮目錄並將文件移動到亞馬遜,但最多隻需要3次備份。這是感謝你的答案。 – Franck

+0

太棒了!如果您正在尋找備份工具,我喜歡使用[Cloudberry Backup](http://www.cloudberrylab.com/cloud-backup-windows-desktop.aspx)。它現在也作爲免費軟件提供。 –