Bash,for for循环问题

时间:2015-07-20 12:23:11

标签: bash for-loop amazon-s3

我想从亚马逊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正在为第一行工作......

1 个答案:

答案 0 :(得分:4)

您需要使用命令替换来迭代所需s3smd ls命令的结果。

for file in $(s3cmd ls s3://my-bucket/$(date +%Y%m%d -d "1 day ago")*); do

但是,这不是迭代命令输出的首选方法,因为理论上结果可能包含空格。有关正确的方法,请参阅Bash FAQ 001