我想从亚马逊S3列出指定的文件(昨天上传的文件)。 然后我想循环这个列表,对于列表中的每个元素,我想解压缩文件。
我的代码是:
for file in s3cmd ls s3://my-bucket/`date +%Y%m%d -d "1 day ago"`*
do s3cmd get $file
arrIN=(${file//my-bucket\//})
gunzip ${arrIN[1]}
done
so basicaly arrIN =($ {file // my-bucket //});爆炸我的字符串,并允许我检索我想要解压缩的文件的名称。
事情是,文件正在下载但是什么都没有解压缩,所以我尝试了:
for file in s3cmd ls s3://my-bucket/`date +%Y%m%d -d "1 day ago"`*
do s3cmd get $file
echo test1
done
正在下载文件,但没有任何回音。 Loop正在为第一行工作......
答案 0 :(得分:4)
您需要使用命令替换来迭代所需s3smd ls
命令的结果。
for file in $(s3cmd ls s3://my-bucket/$(date +%Y%m%d -d "1 day ago")*); do
但是,这不是迭代命令输出的首选方法,因为理论上结果可能包含空格。有关正确的方法,请参阅Bash FAQ 001。