Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写bash脚本来下载多个S3冰川档案?_Bash_Amazon Web Services_Aws Cli_Amazon Glacier - Fatal编程技术网

如何编写bash脚本来下载多个S3冰川档案?

如何编写bash脚本来下载多个S3冰川档案?,bash,amazon-web-services,aws-cli,amazon-glacier,Bash,Amazon Web Services,Aws Cli,Amazon Glacier,我正在使用下面的bash脚本从AWS S3 glacier下载多个归档文件 #!/usr/bin/env bash export account_id=my_account_id export vault_name=my_value export archive_ids=("fA5tzbZeENQXl-hflqGmj8baB9q5ORwKAZlglAJeKDfNoomKJWLmA7SxpNPvgDxbS46Cp6Q8ByJiB7Vp8EipJ5shiSVMoj8Y5AZjxJEYhS

我正在使用下面的bash脚本从AWS S3 glacier下载多个归档文件

#!/usr/bin/env bash

export account_id=my_account_id
export vault_name=my_value
export archive_ids=("fA5tzbZeENQXl-hflqGmj8baB9q5ORwKAZlglAJeKDfNoomKJWLmA7SxpNPvgDxbS46Cp6Q8ByJiB7Vp8EipJ5shiSVMoj8Y5AZjxJEYhSsoQzHoqRQ48U2jiiDuBQ6ZW9Pazpp6PQ" "sLTV5km56fyT5k4TZIa9hQ9Q0m5YsmIQv8N1Vl4la5FTlsywobCARmvFKvI-KTJkyrGcm82LpRe62U9Z8xn6TEzdBAXYlgDSNI75biDMicBM76gyJ2dcpBRnDdulgK2ZhaZWgx0cbB")

for i in ${archive_ids[@]}; do
  aws glacier initiate-job --vault-name ${VAULT_NAME} --account-id ${account_id} --job-parameters "{\"Type\": \"archive-retrieval\", \"ArchiveId\": \"$i\", \"Tier\": \"Expedited\"}"
done
上述脚本的一个问题是,它要求我在第一次
for
循环后按
q
继续执行

脚本保持在显示
位置
的状态,并在第一个循环后显示
作业ID
。我必须记住
jobId
q
使其离开此状态

{
    "location": "/<account_id>/vaults/<vault_name>/jobs/1JbD7xVEBcOWQC1qnmxmNNnEpfy8E3-1fLaR6XoUnU5DK7TARLsS4-9jalykFeqK6_3A2VpvoscMz_xsTtAZYj_M_XSu",
    "jobId": "1JbD7xVEBcOWQC1qnmxmNNnEpfy8E3-1fLaR6XoUnU5DK7TARLsS4-9jalykFeqK6_3A2VpvoscMz_xsTtAZYj_M_XSu"
}
{
“位置”:“//vaults//jobs/1JbD7xVEBcOWQC1qnmxmNNnEpfy8E3-1flar6xounu5dk7tarls4-9jalykfeq6_3A2VpvoscMz_xsTtAZYj_XSu”,
“作业ID”:“1JbD7xVEBcOWQC1qnmxmNNnEpfy8E3-1LAR6XOUUN5DK7TARLSS4-9JALYKFEQ6-2VPVOSCMZ\u xsTtAZYj\u M\u XSu”
}

如何将
jobId
输出到文件并使其不处于停止状态,以便使用脚本下载多个存档文件?

我怀疑您正在使用AWS CLI v2,问题是由客户端寻呼机引起的

您可以在
~.aws/config
文件中使用此配置选项停用寻呼机:

[default]
cli_pager=

请参阅:

我编写了一个脚本来启动检索多个存档的作业,然后将所有作业ID存储到一个文件中

#!/usr/bin/env bash

# the file to store all the "archive-retrieval" jobs' ids 
export job_ids_file=job_ids.log
export vault_name=my-vault
export archive_ids=("fA5tbzZegNQXl-hflqGmj8bDB9q5ORwKAZlglJJpK8fNoomKJWLmA7SxpNPvgDxbS46Cp6Q8ByJiB7Vp8EipJ5shiScMoj8Y5AZjxJEYhSsoQzHoqRQ4SU2DziDcBQaZW4Pqapw6PQ" "sLTV5kmh6fy45k4TZI49hQ9Q0m5YsmIQv8N1Vl4la5FTls2wobCAcmvFKvI-KTJkyrGcm82LpRe62U9Z8vn6TzpdBAXYagDSNI75biGMicBM74gyJ2dcpBRnDduqgK2ZhaZWgx0cbA")

rm ${job_ids_file}

for i in ${archive_ids[@]}; do
  aws glacier initiate-job --vault-name ${vault_name} \
  --account-id - \
  --job-parameters "{\"Type\": \"archive-retrieval\", \"ArchiveId\": \"$i\", \"Tier\": \"Expedited\"}" \
  --output text \
  --query 'jobId' >> ${job_ids_file}
done
启动所有作业后,我运行第二个脚本开始下载归档文件

#!/usr/bin/env bash

export vault_name=my-vault
# store all the job ids into an array called "job_ids"
export job_ids=$(<job_ids.log)

for j in ${job_ids[@]}; do
    echo job: ${j}
    aws glacier get-job-output \
      --vault-name ${vault_name} \
      --account-id - \
      --job-id ${j} \
      ${j}.tar
done
#/usr/bin/env bash
导出vault\u name=我的vault
#将所有作业ID存储到名为“作业ID”的数组中
导出作业ID=$(