am尝试从S3存储桶中获取文件,从某些前缀开始。为此,请在bash脚本中使用aws cli命令。
下面是我的代码
#!/bin/bash
FILESIZE=$(mktemp)
declare -a files=( "A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0" )
for n in "${!files[@]}"; do
printf '%8d %s\n' "${n}" ${files[n]}
echo aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, '${files[n]}$(date +%m%d)')]"
完成
在我的代码中,在引号内扩展变量时出现问题, $(date +%m%d)**日期变量正在扩展,但我需要避免单引号**'A1S00526'。我怎样才能做到这一点 请帮我
输出:
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'A1S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D1S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D2S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D3S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D4S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D5S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D6S00526')]
预期输出:
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, A1S00526)]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D1S00526)]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D2S00526)]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D3S00526)]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D4S00526)]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D5S00526)]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D6S00526)]
有人可以帮我扩展引号内的变量
当我运行以下代码时,请找到附件的输出
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query \'"Contents[?contains(Key, ${files[n]}$(date +%m%d))]"\'
答案 0 :(得分:0)
这是您需要做的:
#!/bin/bash
FILESIZE=$(mktemp)
declare -a files=("A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0")
for n in "${!files[@]}"; do
#printf '%8d %s\n' "${n}" ${files[n]}
echo aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query \'"Contents[?contains(Key, ${files[n]}$(date +%m%d))]"\'
done
输出将是:
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, A1S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D1S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D2S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D3S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D4S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D5S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D6S00526)]'
答案 1 :(得分:0)
如果您将echo
写为
echo aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, ${files[n]}$(date +%m%d))]"
您将准确地获得所需的输出。如果您实际上要运行该命令,并且将引号传递给aws
则很重要,它将变为
for n in "${!files[@]}"; do
printf '%8d %s\n' "${n}" ${files[n]}
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, '${files[n]}$(date +%m%d)')]"
done
简而言之:您想要引号,将它们放入。您不希望将其引出。