特定のプレフィックスで始まり、S3バケットからファイルをインポートしようとします。このために私は使用しますAWS コマンドラインインターフェイスBashスクリプトのコマンド。
以下は私のコードです
#!/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]}
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, '${files[n]}$(`date +%m%d`)')]" --output text | awk '{print $2, $4}' >> "$FILESIZE"
#cat $FILESIZE
done
私のコードで引用符の中に変数を展開するときに問題があります。 $( date +%m%d
)日付変数は引用符で囲まれません。したがって、コードの出力は次のようになります。上記のプレフィックスで始まり、今日到着したファイルのみを入力としてインポートする必要があります。
Error: command not found in the line aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, '${files[n]}$(`date +%m%d`)')]" --output text | awk '{print $2, $4}' >> "$FILESIZE"
誰かが引用符の中で変数を拡張するのに役立ちますか?
ベストアンサー1
2つの奇妙なコマンド置換エラーがあります。
エンコーディングの代わりに
$(`date +%m%d`)
次のように書くだけです。
$(date +%m%d)
バックティック(`)は、古いスタイルのコマンドの置き換えに使用されます。
foo = `コマンド`
foo=$(command)
代わりにこの構文を使用することをお勧めします。 $() 内のバックスラッシュ処理は驚くべきことではなく、$() は入れ子になりやすいです。バラよりhttp://mywiki.wooledge.org/BashFAQ/082
テスト拡張変数
declare -a files=( "A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0" )
for n in "${!files[@]}"; do
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')]
キーに延長された日付が含まれています。0526