Bash,关于for循环的问题

Bash,关于for循环的问题,bash,for-loop,amazon-s3,Bash,For Loop,Amazon S3,我想列出AmazonS3中指定的文件(昨天上传的文件)。 然后我想在这个列表上循环,对于列表中的每个元素,我都想解压缩文件 我的代码是: 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 所以basicali arrIN=(${file//my bucket//});

我想列出AmazonS3中指定的文件(昨天上传的文件)。 然后我想在这个列表上循环,对于列表中的每个元素,我都想解压缩文件

我的代码是:

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
所以basicali 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

正在下载文件,但没有任何内容。循环仅适用于第一行…

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

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

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

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

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

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

$file
设置为
s3smd
,然后设置为
ls
,然后设置下一个表达式的计算结果。这可能不是你想要的。你为什么在那里使用
ls
,这似乎是多余的。请尝试
echo s3://my bucket/$(日期+%Y%m%d-d“1天前”)*
了解我的意思。
$file
设置为
s3smd
,然后设置为
ls
,然后再设置下一个表达式的计算结果。这可能不是你想要的。你为什么在那里使用
ls
,这似乎是多余的。请尝试
echo s3://my bucket/$(日期+%Y%m%d-d“1天前”)*
了解我的意思。