2016-08-19 35 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)。它现在也作为免费软件提供。 –