Bash,关于for循环的问题
我想列出AmazonS3中指定的文件(昨天上传的文件)。 然后我想在这个列表上循环,对于列表中的每个元素,我都想解压缩文件 我的代码是: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//});
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天前”)*
了解我的意思。