當需要將已上傳至OSS的檔案、圖片、視頻等資源下載到本地時,可以使用ossutil的cp命令,支援下載多個檔案、下載時限速,或者在已開啟版本控制的Bucket內下載指定版本檔案等。
注意事項
從ossutil 1.6.16版本開始,命令列中Binary名稱支援直接使用ossutil,無需根據系統重新整理Binary名稱。如果ossutil版本低於1.6.16,則需要根據系統重新整理Binary名稱。更多資訊,請參見命令列工具ossutil命令參考。
許可權說明
阿里雲帳號預設擁有全部許可權。阿里雲帳號下的RAM使用者或RAM角色預設沒有任何許可權,需要阿里雲帳號或帳號管理員通過RAM Policy或Bucket Policy授予操作許可權。
API Action | 說明 |
| 下載Object。 |
| 可選。通過 |
| 可選。下載的Object涉及KMS伺服器端加密時,需要此許可權。 |
| |
| 可選。批量下載檔案(遞迴操作)時,需要授予此操作的許可權。 |
命令格式
ossutil cp cloud_url file_url [options]參數 | 說明 |
cloud_url | OSS檔案路徑,格式為 |
file_url | 本地檔案路徑。如果目標是目錄,需以路徑分隔字元(/ 或 \)結尾。如Linux系統檔案路徑 |
-r, --recursive | 遞迴操作。當指定該選項時,ossutil會對Bucket下所有合格Object進行操作,否則只對指定的單個Object進行操作。 |
-f --force | 強制操作,不進行詢問提示。 |
-u,--update | 只有當目標檔案不存在,或源檔案的最後修改時間晚於目標檔案時,ossutil才會執行下載操作。 |
--maxdownspeed | 最大下載速度,單位為KB/s。預設值為0,表示不限制下載速度。 |
--disable-ignore-error | 大量操作時不忽略錯誤。 |
--only-current-dir | 僅下載目前的目錄下的檔案,忽略子目錄及子目錄下的檔案。 |
--bigfile-threshold | 設定斷點續傳檔案的大小閾值,單位為位元組。 預設值:100 MB 取值範圍:0~9223372036854775807 |
--part-size | 設定分區大小,單位為位元組。預設情況下ossutil會根據檔案大小自行計算合適的分區大小值。 取值範圍:1~9223372036854775807 |
--checkpoint-dir | 指定斷點續傳記錄資訊所在的目錄。斷點續傳操作失敗時,ossutil會自動建立名為 |
--range | 下載目標檔案的指定欄位,並儲存為一個新的檔案,欄位從0開始編號。
|
--encoding-type | 檔案名稱的編碼方式。取值為url。如果不指定該選項,則表示檔案名稱未經過編碼。 |
--include | 包含符合指定條件的所有檔案。 更多資訊,請參見include和exclude選項。 |
--exclude | 不包含符合指定條件的檔案。 更多資訊,請參見include和exclude選項。 |
--meta | 設定檔案的中繼資料,格式為 |
--acl | 檔案的讀寫權限ACL。取值如下:
|
--snapshot-path | 指定儲存下載檔案時的快照資訊所在的目錄。在下一次下載檔案時,ossutil會讀取指定目錄下的快照資訊進行增量下載。 |
--disable-crc64 | 關閉CRC64資料校正。預設情況下,ossutil進行資料轉送時都會開啟CRC64校正。 |
--payer | 請求的支付方式。如果希望訪問指定路徑下的資源產生的流量、請求次數等費用由要求者支付,請將此選項的值設定為requester。 |
--partition-download | 用於分區下載。該選項取值格式為 |
-j,--job | 多檔案操作時的並發任務數,預設值為3,取值範圍為1~10000。 |
--parallel | 單檔案操作時的並發任務數,取值範圍為1~10000。 如果不設定此選項,預設由ossutil根據操作類型和檔案大小自行決定。 |
--version-id | 下載指定版本的檔案,--version-id選項僅支援在已開啟版本控制的Bucket內使用。開啟Bucket版本控制命令請參見bucket-versioning(版本控制)。 |
--start-time | Unix時間戳記。如果輸入這個選項,最後更新時間早於該時間的Object會被忽略。 說明 僅1.7.18及以上版本支援設定該參數。關於如何升級版本,請參見update(ossutil版本升級)。 |
--end-time | Unix時間戳記。如果使用該選項,則最後更新時間晚於通過此選項指定時間的Object會被忽略。 說明
|
關於此命令的其他通用選項,請參見通用選項。
當預設並發數達不到使用者的效能要求時,可以調整-j,--jobs和--parallel選項來升降效能。預設情況下,ossutil根據檔案大小來計算parallel。當批量傳輸大檔案時,實際的並發數為jobs數乘以parallel數。
若執行命令的ECS或伺服器的資源(網路、記憶體、CPU)有限,建議將並發數調低(如100以下)。如果資源未佔滿,可適當增加並發數。
並發數過高可能因線程切換開銷和資源競爭導致效能下降,甚至引發EOF錯誤。請根據機器的實際資源狀況調整-j,--jobs和--parallel。進行效能壓測時,建議從較低的並發數開始,逐步增加以找到最佳值。
使用樣本
以下樣本均以 Linux 系統為例,請根據作業系統和實際環境修改參數。樣本環境假定:
Bucket 名稱:
examplebucketOSS 目錄:
destfolder/本地目錄:
localfolder/本地檔案:
examplefile.txt
下載單個檔案
下載檔案到指定目錄,並沿用原檔案名稱:
ossutil cp oss://examplebucket/destfolder/examplefile.txt localfolder/下載檔案到指定目錄,並重新命名為
example.txt:ossutil cp oss://examplebucket/destfolder/examplefile.txt localfolder/example.txt
批量下載
使用
-r選項下載destfolder目錄及其所有子目錄和檔案。ossutil cp -r oss://examplebucket/destfolder/ localfolder/使用
--only-current-dir選項,僅下載目前的目錄而忽略子目錄下的檔案。ossutil cp oss://examplebucket/destfolder/ localfolder/ --only-current-dir -r使用
-u選項,僅下載本地不存在或在 OSS 上已更新的 Object,跳過本地已存在且未改變的檔案。ossutil cp -r -u oss://examplebucket/destfolder/ localfolder/
下載合格檔案
下載
destfolder目錄下所有非JPG格式的檔案:ossutil cp -r oss://examplebucket/destfolder/ localfolder/ --exclude "*.jpg"下載
destfolder目錄下檔案名稱包含abc,但格式不為JPG和TXT 的檔案:ossutil cp -r oss://examplebucket/destfolder/ localfolder/ --include "*abc*" --exclude "*.jpg" --exclude "*.txt"
下載時限速
使用 --maxdownspeed 選項將下載速度限制為 1 MB/s (1024 KB/s)。
ossutil cp -r oss://examplebucket/destfolder/ localfolder/ --maxdownspeed 1024範圍下載
使用 --range 選項將examplefile.txt的第10到第20個字元作為一個檔案下載到本地。
ossutil cp oss://examplebucket/destfolder/examplefile.txt localfolder/ --range 10-20下載指定時間範圍檔案
使用 --start-time和 --end-time選項僅下載destfolder 目錄下修改時間在北京時間2023年10月31日10:09:18至2023年10月31日12:55:58內的檔案。
ossutil cp -r oss://examplebucket/destfolder/ localfolder/ --start-time 1698718158 --end-time 1698728158下載指定版本的檔案
首先,使用 ls --all-versions 命令擷取 Object 的所有版本 ID,再使用 --version-id 選項下載指定版本。
--version-id選項僅支援在已開啟版本控制的Bucket內使用。開啟Bucket版本控制命令請參見bucket-versioning(版本控制)。
ossutil cp oss://examplebucket/test.jpg localfolder/ --version-id CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE3MDRk下載並產生快照資訊
使用 --snapshot-path選項在指定的目錄下組建檔案下載的快照資訊,在下一次指定該選項下載時,ossutil會讀取指定路徑下的快照資訊進行增量下載,詳情參見上傳並產生快照。
ossutil cp -r oss://examplebucket/destfolder/ localfolder/ --start-time 1698718158 --end-time 1698728158跨帳號或跨地區下載
使用 -e, -i, -k 通用選項,從另一個帳號位於“華東2(上海)”地區的 Bucket 下載檔案。
需要根據Bucket所在地區填寫對應的Endpoint。更多資訊,請參見地區和Endpoint。
ossutil cp oss://examplebucket/exampleobject.txt localfolder/ -e oss-cn-shanghai.aliyuncs.com -i yourAccessKeyID -k yourAccessKeySecret