2015-07-20 153 views
0

我想從亞馬遜S3中列出指定的文件(昨天上傳的文件)。 然後我想在這個列表上循環,並且對於列表中的每個單個元素,我想解壓縮該文件。Bash,for循環問題

我的代碼是:

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 

所以basicaly arrIN =($ {//文件我鬥//});爆炸我的字符串,並允許我檢索我想要解壓縮的文件的名稱。

事情是,文件正在下載,但什麼都沒有解壓,所以我嘗試:

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

'$ file'被設置爲's3smd',然後是'ls',然後無論下一個表達式的計算結果如何。這可能不是你想要的。 – choroba

+0

爲什麼你在那裏使用'ls',看起來多餘。嘗試'echo s3:// my-bucket/$(date +%Y%m%d -d「1 day ago」)*'看看我的意思。 – cdarke

回答

4

您需要使用命令替換來遍歷所需的s3smd ls命令的結果。

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

但是,這不是迭代命令輸出的首選方式,因爲理論上結果可能包含空格。有關正確的方法,請參閱Bash FAQ 001