![](/img/trans.png)
[英]how to install awscli.msi and upload files to s3 using .bat script?
[英]Resuming interrupted s3 download with awscli
我正在使用 awscli 下載文件:
$ aws s3 cp s3://mybucket/myfile myfile
但是下載被中斷了(電腦進入休眠狀態)。 我怎樣才能繼續下載? S3 支持 Range 標頭,但awscli s3 cp
不讓我指定它。
該文件不可公開訪問,因此我無法使用 curl 手動指定標頭。
awscli 工具中有一個“隱藏”命令,它允許對 S3 進行較低級別的訪問: s3api
。†它不太用戶友好(沒有 s3:// URL 也沒有進度條)但它確實支持get-object
上的范圍說明符:
--range (string) Downloads the specified range bytes of an object. For
more information about the HTTP range header, go to
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.
以下是繼續下載的方法:
$ size=$(stat -f%z myfile) # assumes OS X. Change for your OS
$ aws s3api get-object \
--bucket mybucket \
--key myfile \
--range "bytes=$size-" \
/dev/fd/3 3>>myfile
您可以使用pv作為基本進度條:
$ aws s3api get-object \
--bucket mybucket \
--key myfile \
--range "bytes=$size-" \
/dev/fd/3 3>&1 >&2 | pv >> myfile
(這個未命名管道的原因是 s3api 在操作結束時將調試消息寫入 stdout,污染了你的文件。此解決方案將 stdout 重新綁定到 stderr 並通過別名釋放管道以用於常規文件內容。沒有的版本pv
在技術上可以寫入 stderr( /dev/fd/2
和2>
),但如果發生錯誤,s3api 將寫入 stderr,然后將其附加到您的文件中。因此,在那里使用專用管道更安全,因為出色地。)
† 在 git 中, s3
是瓷器,而s3api
是管道。
使用s3cmd
它有一個內置的--continue
函數。示例:
# Start a download
> s3cmd get s3://yourbucket/yourfile ./
download: 's3://yourbucket/yourfile' -> './yourfile' [1 of 1]
123456789 of 987654321 12.5% in 235s 0.5 MB/s
[ctrl-c] interrupt
# Pick up where you left off
> s3cmd --continue get s3://yourbucket/yourfile ./
請注意,S3 cmd 不是多線程的,而awscli
是多線程的,例如awscli
更快。 當前維護的s3cmd
分支,稱為s4cmd
似乎提供多線程功能,同時保持s3cmd
的可用性特征:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.