cp(拷貝檔案)
拷貝檔案(Object)是指在不改變檔案內容的情況下,將同一地區下的源儲存空間(Bucket)內的檔案複製到目標Bucket,或者將檔案複製到相同儲存空間(Bucket)的其他目錄。您可以通過ossutil的cp命令完成拷貝。
注意事項
-
要拷貝檔案,您必須具有
oss:GetObject、oss:ListObjects和oss:PutObject許可權。具體操作,請參見為RAM使用者授予自訂的權限原則。 -
只支援拷貝對象,不支援拷貝未合并的分區。
-
預設同時複製標籤和對象屬性。可以使用--copy-props選項設定屬性和標籤的複製規則。
-
使用
-u, --update選項時,系統會對每個待檢查檔案(無論目標檔案是否存在)至少發起一次 HEAD 請求以進行比對。在資料變更較少的情境下,將產生大量低效請求,可能影響效能並帶來額外的請求費用。建議結合實際業務情況評估後再謹慎使用,避免不必要的資源消耗。
命令格式
ossutil cp oss://src_bucket[/src_prefix] oss://dest_bucket[/dest_prefix] [flags]
|
參數 |
類型 |
說明 |
|
src_bucket |
string |
源Bucket名稱。 |
|
src_prefix |
string |
源Bucket下的某個檔案目錄或指定首碼。 |
|
dest_bucket |
string |
目標Bucket名稱。 |
|
dest_prefix |
string |
目標Bucket下的某個檔案目錄或指定首碼。 |
|
--acl |
string |
對象的存取權限。取值:
|
|
--bandwidth-limit |
SizeSuffix |
用於限制網路頻寬,控制資料轉送的速率。最小值為1024 B/s。單位預設為B/s。 配置此參數時,可以根據需要為頻寬值指定單位,可選單位包括B(位元組)、K(KB)、M(MB)和G(吉位元組)。例如 50 M表示頻寬節流設定為50 MB/s。 |
|
--bigfile-threshold |
SizeSuffix |
開啟大檔案分區上傳、下載或拷貝的閾值(預設值104857600)。 |
|
--cache-control |
string |
指定該對象被下載時網頁的緩衝行為。 |
|
--checkers |
int |
並行啟動並執行檢查器數量(預設值為16)。 |
|
--checkpoint-dir |
string |
斷點續傳資訊的指定目錄(預設值 |
|
--checksum |
/ |
僅拷貝檔案大小和校正和(如果存在)不一致的源檔案,僅當對象間拷貝有效。 |
|
--content-disposition |
string |
指定對象的展示形式。 |
|
--content-encoding |
string |
聲明對象的編碼方式。 |
|
--content-type |
string |
對象的內容類型。 |
|
--copy-props |
string |
用於設定對象間拷貝時的屬性和標籤複製規則,支援以下三種設定:
|
|
-d, --dirs |
string |
處理目前的目錄下的檔案和子目錄,而非遞迴處理所有子目錄下的所有檔案。 |
|
--encoding-type |
string |
輸入的對象名或檔案名稱的編碼方式。取值:url。 |
|
--end-with |
string |
按字母排序,返回設定值之前的對象,包含設定值。 |
|
--exclude |
stringArray |
路徑或檔案名稱的排除規則。 |
|
--exclude-from |
stringArray |
從規則檔案裡讀取排除規則。 |
|
--expires |
string |
指定緩衝內容的絕對到期時間。 |
|
--files-from |
stringArray |
從檔案中讀取源檔案名稱列表,忽略空行或注釋行。僅適用於過濾情境。 |
|
--files-from-raw |
stringArray |
從檔案中讀取源檔案名稱列表。僅適用於過濾情境。 |
|
--filter |
stringArray |
路徑或檔案名稱過濾規則。 |
|
--filter-from |
stringArray |
從規則檔案讀取過濾規則。 |
|
-f, --force |
/ |
強制操作,不進行詢問提示。 |
|
--ignore-existing |
/ |
跳過已存在的目標檔案。 |
|
--include |
stringArray |
路徑或檔案名稱的包含規則。 |
|
--include-from |
stringArray |
從規則檔案裡讀取包含規則。 |
|
-j, --job |
int |
並發任務數,預設值為 3。 說明
僅在同時指定 |
|
--list-objects |
/ |
使用ListObjects介面列舉對象。 |
|
--max-size |
SizeSuffix |
限制傳輸的最大檔案大小,預設是位元組,或單位尾碼形式B|K|M|G|T|P,1K(KiB)=1024B。 |
|
--metadata |
strings |
指定對象的使用者中繼資料,使用key=value格式。 |
|
--metadata-directive |
string |
指定如何設定目標對象的中繼資料。取值:
|
|
--metadata-exclude |
stringArray |
對象中繼資料的排除規則。 |
|
--metadata-filter |
stringArray |
對象中繼資料過濾規則。 |
|
--metadata-filter-from |
stringArray |
從規則檔案讀取對象中繼資料過濾規則。 |
|
--metadata-include |
stringArray |
對象中繼資料的包含規則。 |
|
--min-age |
Duration |
僅拷貝修改時間在指定時間間隔前的檔案,預設單位是秒,可以使用單位尾碼形式。例如 1h,表示1小時。 說明
|
|
--max-age |
Duration |
僅拷貝修改時間在指定時間間隔內的檔案,預設單位是秒,可以使用單位尾碼形式。例如 1h,表示1小時。 說明
|
|
--min-mtime |
Time |
僅拷貝修改時間在指定時間之後的檔案,時間格式:UTC時間。例如2006-01-02T15:04:05。 說明
|
|
--max-mtime |
Time |
僅拷貝修改時間在指定時間之前的檔案,時間格式:UTC時間,例如 2006-01-02T15:04:05。 |
|
--min-size |
SizeSuffix |
限制傳輸的最小檔案大小,預設是位元組,或單位尾碼形式B|K|M|G|T|P,1K(KiB)=1024B。 |
|
--no-progress |
/ |
不顯示進度條。 |
|
--no-error-report |
/ |
批處理時不建置錯誤報告檔案 |
|
--output-dir |
string |
指定批處理過程中產生的錯誤報表檔案所在的目錄(預設為 |
|
--page-size |
int |
批量拷貝時分頁列舉的對象的最大值(預設值1000),取值範圍1~1000。 |
|
--parallel |
int |
單檔案內部操作的並發任務數。 |
|
--part-size |
SizeSuffix |
分區大小,預設情況下根據檔案大小自行計算合適的分區大小值。取值範圍100KiB~5GiB。 |
|
-r, --recursive |
/ |
遞迴進行操作。當指定該選項時,命令會對儲存空間下所有合格對象進行操作,否則只對路徑指定的對象進行操作。 |
|
--request-payer |
string |
請求的支付方式,如果為要求者付費模式,請設定該值。取值:requester。 |
|
--size-only |
/ |
僅拷貝檔案大小不一致的源檔案。 |
|
--start-after |
string |
按字母排序,返回設定值之後的對象,不包含設定值。 |
|
--storage-class |
string |
對象的儲存類型, 取值:
|
|
--tagging |
string |
指定對象的標籤,使用key=value格式。 |
|
--tagging-directive |
string |
指定如何設定目標對象的標籤。取值:
|
|
-u, --update |
/ |
跳過目標端已存在且修改時間比源檔案更新的檔案。 說明
如果目標端已存在的檔案的修改時間比源檔案的修改時間早,則會更新該檔案。 |
|
--version-id |
string |
指定對象的版本 ID(VersionId)。 |
從 ossutil 2.3.0 起,--job、--parallel、--bigfile-threshold、--part-size、--write-buffer-size 選項支援通過設定檔設定。在設定檔對應 profile 段下以 key=value 格式追加(例如 job=10),或通過 ossutil config set 寫入。命令列選項的優先順序高於設定檔。
關於支援的全域命令列選項,請參見支援的全域命令列選項。
目標檔案命名規則如下:
-
單檔案複製時,如果dest_prefix為空白,則對象的名字為源檔案相對路徑。
-
單檔案複製時,如果dest_prefix以"/"結尾,則對象的名字為dest_prefix + 源檔案相對路徑。
-
單檔案複製時,如果dest_prefix不以"/"結尾, 則與dest_prefix保持一致。
-
批量複製時,如果dest_prefix以"/"結尾,則對象的名字為dest_prefix + 源檔案相對路徑。
-
批量複製時,如果dest_prefix不以"/"結尾,則對象的名字為dest_prefix + "/" +源檔案相對路徑。
使用樣本
-
拷貝單個檔案
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/desfolder/ -
拷貝增量檔案
批量拷貝時,如果指定--update選項,跳過目標端已存在且修改時間比源檔案更新的檔案。命令如下:
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/desfolder/ -r --update -
同地區複製後的 Bucket 間拷貝
-
使用
--checksum參數實現基於校正和的增量拷貝:適用於需要嚴格比較檔案內容一致性的情境(如批量拷貝失敗後重傳,跳過已成功拷貝的檔案)。系統執行邏輯如下:-
優先比較檔案大小;
-
若檔案大小相同,則進一步計算並比較 CRC64 校正和;
-
僅當校正和不一致時,才執行實際拷貝。
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/desfolder/ -r --checksum -
-
使用
--ignore-existing參數跳過已存在檔案:適用於目標端已存在檔案時直接跳過、不執行覆蓋的情境:ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/desfolder/ -r --ignore-existing
-
-
重新命名檔案
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/example.txt通過cp命令重新命名檔案時,原檔案仍存在,您可以在重新命名後刪除原檔案。
-
修改檔案對象標籤
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/ --tagging "abc=1&bcd=2&……"