オブジェクトの内容を変更することなく、同じObject Storage Service (OSS) バケット内の別のディレクトリ、またはソースバケットと同じリージョンにある別のバケットにオブジェクトをコピーできます。 ossutilでは、cpコマンドを使用してオブジェクトをコピーできます。
使用上の注意
オブジェクトをコピーするには、
oss:GetObject
、oss:ListObjects
、およびoss:PutObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。ossutil 1.6.16以降の場合、コマンドラインでossutilをバイナリ名として直接使用できます。 オペレーティングシステムに基づいてバイナリ名を更新する必要はありません。 1.6.16より前のossutilの場合、オペレーティングシステムに基づいてバイナリ名を更新する必要があります。 詳細は、「ossutilコマンドリファレンス」をご参照ください。
cpコマンドを実行して、別のAlibaba Cloudアカウントに属するバケット、または別のリージョンにあるバケットにオブジェクトをコピーすることはできません。 Alibaba Cloudアカウントまたはリージョン間でオブジェクトをコピーする場合は、ossimportまたはData Online Migrationを使用します。
cpコマンドを使用してオブジェクトをコピーできますが、パーツはコピーできません。
追加可能なオブジェクトはコピーできません。
ソースオブジェクトに対する読み取り権限と、宛先バケットに対する読み取りおよび書き込み権限が必要です。 それ以外の場合、コピー操作は失敗します。 オブジェクトをコピーする方法の詳細については、「オブジェクトのコピー」をご参照ください。
コマンド構文
ossutil cp cloud_url cloud_url
[-r, --recursive]
[-f --force]
[-u --update]
[--disable-ignore-error]
[--only-current-dir]
[--bigfile-threshold <value>]
[--part-size <value>]
[--checkpoint-dir <value>]
[--encoding-type <value>]
[--include <value>]
[--exclude <value>]
[--meta <value>]
[--acl <value>]
[--disable-crc64]
[--payer <value>]
[-j, --job <value>]
[--parallel <value>]
[--version-id <value>]
[--start-time <value>]
[--end-time <value>]
次の表に、上記のコマンドのパラメーターとオプションを示します。
パラメータ /オプション | 説明 |
cloud_url | ソースオブジェクトと宛先オブジェクトのパス。 形式: |
-r, -- recursive | 再帰操作。 このオプションを指定すると、指定された条件を満たすバケット内のすべてのオブジェクトに対して操作が実行されます。 このオプションを指定しない場合、指定されたオブジェクトに対してのみ操作が実行されます。 |
-f -- 力 | 確認のプロンプトなしでコマンドを強制的に実行することを指定します。 |
-u, -- update | オブジェクトが宛先バケットに存在しない場合、またはソースオブジェクトの最終変更時刻が宛先オブジェクトの最終変更時刻よりも遅い場合にのみ、ossutilがソースオブジェクトをコピーするように指定します。 |
-- disable-無視-エラー | バッチ操作中にエラーが無視されないように指定します。 |
-- only-current-dir | 現在のディレクトリ内のオブジェクトのみをコピーするように指定します。 これらのサブディレクトリ内のサブディレクトリおよびオブジェクトはコピーされません。 |
-bigfile-threshold | 操作に再開可能なアップロードを使用するためのオブジェクトサイズのしきい値。 単位はバイトです。 デフォルト値: 100 MB。 有効な値: 0 ~ 9223372036854775807 |
-- 部分サイズ | 部品サイズを指定します。 単位はバイトです。 デフォルトでは、ossutilはオブジェクトサイズに基づいて部品サイズを決定します。 有効な値: 1 ~ 9223372036854775807 |
-- checkpoint-dir | 再開可能アップロードコピータスクのチェックポイント情報が格納されるディレクトリ。 タスクが失敗すると、ossutilは自動的にという名前のディレクトリを作成します。 |
-- encoding-type | オブジェクトの名前をエンコードするために使用されるメソッド。 値をurlに設定します。 このオプションを指定しない場合、オブジェクトの名前はエンコードされません。 |
-含める | 指定された条件を満たすオブジェクトをコピーすることを指定します。 |
-除外 | 指定された条件を満たさないすべてのオブジェクトをコピーすることを指定します。 |
-メタ | オブジェクトメタデータ。 オブジェクトメタデータを |
-- acl | オブジェクトのアクセス制御リスト (ACL) 。 有効な値:
|
-- disable-crc64 | CRC-64を無効にすることを指定します。 デフォルトでは、ossutilはデータ送信中にCRC-64を有効にします。 |
-- 支払人 | リクエストの支払人。 指定されたパスのリソースにアクセスするリクエスタがトラフィックを支払い、料金を要求する場合は、このパラメータをリクエスタ。 |
-j, -- jobs | 複数のオブジェクトに対して実行できる同時タスクの数。 有効な値: 1 ~ 10000 デフォルト値: 3。 |
-- 平行 | 1つのオブジェクトに対して実行できる同時タスクの数。 有効な値: 1 ~ 10000 このオプションを設定しない場合、ossutilは操作タイプとオブジェクトサイズに基づいて値を指定します。 |
-- version-id | コピーするオブジェクトのバージョンID。 このオプションは、バージョン管理が有効になっているバケット内のオブジェクトに対してのみ指定できます。 |
-- 開始時間 | 最後に変更された時間に基づいてオブジェクトをフィルタリングするための時間範囲の開始。 値は、UNIXの時刻形式に続くタイムスタンプです。 最終変更時刻がUNIXタイムスタンプより前のオブジェクトは無視されます。 説明 ossutil 1.7.18以降のみがこのパラメータをサポートしています。 ossutilの更新方法の詳細については、「update」をご参照ください。 |
-終了時間 | 最後に変更された時間に基づいてオブジェクトをフィルタリングする時間範囲の終了。 値は、UNIXの時刻形式に続くタイムスタンプです。 最終変更時刻がUNIXタイムスタンプより後のオブジェクトは無視されます。 説明
|
オプションのデフォルト設定がパフォーマンス要件を満たしていない場合は、-j、-- jobs、-- parallelオプションを使用してパフォーマンスを調整できます。 デフォルトでは、ossutilはオブジェクトサイズに基づいて -- parallelの値を計算します。 複数のラージオブジェクトをコピーする場合、同時実行タスクの実際の数は、-j, -- jobsの値に -- parallelの値を掛けて計算されます。
Elastic Compute Service (ECS) インスタンスまたはサーバーのネットワーク帯域幅、メモリ、CPUなどのリソースが制限されている場合は、同時実行値を100未満の値に調整することを推奨します。 ネットワーク帯域幅、メモリ、CPUなどのリソースがアイドル状態のままである場合、同時実行タスクの数を増やすことができます。
同時タスクの数が多すぎると、スレッドが切り替えてリソースを競合するため、ossutilのコピー操作のパフォーマンスが低下する可能性があります。 さらに、EOF (end-of-file) エラーが発生することがある。 これらの問題を防ぐために、使用可能なリソースに基づいて -j、-- jobs、-- parallelの値を調整できます。 ストレステストを実行するには、2つのオプションに小さな値を指定してから、最適な値に増分します。
サンプル環境
このトピックの例では、同じバケット内の異なるディレクトリ間およびLinuxのバケット間でオブジェクトをコピーする方法を示します。 実際のビジネスシナリオでサンプルコマンドを使用するには、オペレーティングシステムと環境に基づいてオプションとパラメーターの設定を変更する必要があります。 サンプル環境:
オペレーティングシステム: Linux
ソースバケット: examplebucket1
ソースバケットのディレクトリ1: srcfolder1
ソースバケットのディレクトリ2: srcfolder2
宛先バケット: examplebucket2
宛先バケットのディレクトリ: desfolder
ソースディレクトリをコピーするかどうかを指定する
ソースパスがスラッシュ (/) で終わっていない場合、ソースバケット内の指定されたプレフィックスを名前に含むすべてのオブジェクトが宛先バケットにコピーされます。 ソースパスがスラッシュ (/) で終わる場合、指定されたディレクトリ内のオブジェクトのみが宛先バケットにコピーされます。
たとえば、次のオブジェクトは、examplebucket1という名前のソースバケットのsrcfolder1ディレクトリに格納されます。
srcfolder1/exampleobject1.txt
srcfolder1/exampleobject2.png
srcfolder1/dir1/
srcfolder1/dir1/exampleobject3.jpg
srcfolder1/dir2/
srcfolder1/dir2/exampleobject4.jpg
スラッシュ (/) で終わらないパスからオブジェクトをコピーする
ossutil cp oss://examplebucket1/srcfolder1 oss://examplebucket2 -r
次のオブジェクトは、ソースバケットからexamplebucket2という名前の宛先バケットにコピーされます。
srcfolder1/exampleobject1.txt srcfolder1/exampleobject2.png srcfolder1/dir1/ srcfolder1/dir1/exampleobject3.jpg srcfolder1/dir2/ srcfolder1/dir2/exampleobject4.jpg
スラッシュ (/) で終わるパスからオブジェクトをコピーする
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2 -r
次のオブジェクトは、ソースバケットからexamplebucket2という名前の宛先バケットにコピーされます。
exampleobject1.txt exampleobject2.png dir1/ dir1/exampleobject3.jpg dir2/ dir2/exampleobject4.jpg
簡単なコピーを実行する
単一のオブジェクトをコピーする
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/srcfolder2/
増分オブジェクトのコピー
複数のオブジェクトをコピーするときに -- updateオプションを指定した場合、ossutilは、宛先オブジェクトが存在しない場合、またはソースオブジェクトの最終変更時刻が宛先オブジェクトの最終変更時刻よりも遅い場合にのみ、オブジェクトをコピーします。 次のコマンドを実行して、増分オブジェクトをコピーします。
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2/path2/ -r --update
このオプションを使用すると、コピーしたオブジェクトをスキップし、コピーに失敗したオブジェクトのみをコピーできます。
一度に複数のオブジェクトをコピーする
次のコマンドを実行して、最終変更時刻が10月31日10:09:18 (UCT + 8) から2023月31日12:55:58 (UTC + 8) の範囲内であるsrcfolder1ディレクトリ内のオブジェクトを2023コピーします。
ossutil cp -r oss://examplebucket1/srcfolder1/ oss://examplebucket2/path2/ --start-time 1698718158 --end-time 1698728158
オブジェクトの名前変更
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/example.txt
cpコマンドを実行してオブジェクトの名前を変更すると、元のオブジェクトが保持されます。 オブジェクトの名前を変更した後、元のオブジェクトを削除できます。
現在のディレクトリ内のオブジェクトのみをコピーし、サブディレクトリ内のオブジェクトをスキップする
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/srcfolder2/ --only-current-dir -r
オブジェクトのメタデータの変更
オブジェクトをコピーするときは、-- metaオプションを使用してオブジェクトのメタデータを変更できます。 このオプションの値は、
header:value#header:value...
形式です。ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/ --meta=Cache-Control:no-cache
pay-by-requesterが有効になっているバケットからpay-by-requesterが無効になっているバケットにオブジェクトをコピーします。
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket2/desfolder/ --payer=requester
特定の条件を満たす複数のオブジェクトをコピーする
特定の条件を満たすオブジェクトをコピーするには、-- includeと -- excludeを指定します。
JPG形式でないすべてのオブジェクトをコピーする
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2/desfolder/ --exclude "*.jpg" -r
名前にabcが含まれ、JPGまたはTXT形式ではないすべてのオブジェクトをコピーします。
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2/desfolder/ --include "*abc*" --exclude "*.jpg" --exclude "*.txt" -r
オブジェクトのストレージクラスの変更
あなたが 上書き -- metaオプションを指定して、オブジェクトのストレージクラスを変更できます。 有効な値:
標準
IA
アーカイブ
ColdArchive
ディープコールドアーカイブ
ストレージクラスの詳細については、「概要」をご参照ください。
-- metaオプションを使用してオブジェクトのストレージクラスを変更すると、オブジェクトの既存のユーザーメタデータがデフォルトで上書きされます。 ストレージクラスを変換し、オブジェクトの既存のユーザーメタデータを保持する場合は、変換前にx-oss-metadata-directive:COPY
オプションを使用して既存のメタデータを保持する必要があります。
オブジェクトの既存のユーザーメタデータの上書き
オブジェクトのストレージクラスをアーカイブに変更する
ossutil cp oss://examplebucket1/srcfolder1/examplefile.txt oss://examplebucket1/srcfolder1/examplefile.txt --meta X-oss-Storage-Class:Archive
特定のディレクトリ内のすべてのオブジェクトのストレージクラスを標準
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/srcfolder1/ --meta X-oss-Storage-Class:Standard -r
オブジェクトの既存のユーザーメタデータを保持する
次のコマンドを実行して、特定のオブジェクトのストレージクラスをIAに変更し、オブジェクトの既存のユーザーメタデータを保持します。
ossutil cp oss://examplebucket1/srcfolder1/examplefile.txt oss://examplebucket1/srcfolder1/examplefile.txt --meta x-oss-metadata-directive:COPY
次のコマンドを実行して、特定のディレクトリ内のすべてのオブジェクトのストレージクラスをStandardに変更し、オブジェクトの既存のユーザーメタデータを保持します。
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/srcfolder1/ --meta x-oss-metadata-directive:COPY -r -f
cpコマンドを実行してオブジェクトのストレージクラスを変更すると、ソースオブジェクトのストレージクラスに基づいてPUTリクエストに対して課金されます。 API操作呼び出し料金は、宛先バケットの請求書に含まれています。
オブジェクトのストレージクラスをIA、Archive、Cold Archive、またはDeep Cold Archiveに変更し、オブジェクトが最小保存期間未満で保存された場合、最小保存期間未満で保存されたオブジェクトのストレージ使用量に対して課金されます。 詳細については、「ストレージ料金」をご参照ください。
cpコマンドを実行してArchive、Cold Archive、またはDeep Cold ArchiveオブジェクトのストレージクラスをStandardまたはIAに変更する前に、restoreコマンドを実行してオブジェクトを復元します。 Archiveオブジェクトのリアルタイムアクセスを有効にすると、Archiveオブジェクトを復元することなく、Archiveオブジェクトのストレージクラスを変更できます。 詳細については、「アーカイブオブジェクトのリアルタイムアクセス」をご参照ください。
cpコマンドを実行して100 MBを超えるオブジェクトのストレージクラスを変更すると、デフォルトでオブジェクトサイズに基づいて適切なパーツサイズが計算されます。 部品サイズが要件を満たさない場合は、-- part-sizeを使用して部品サイズを変更できます。 部品の数が10,000より少ないことを確認してください。
オブジェクトのタグの変更
-- taggingをcpコマンドに追加して、オブジェクトのタグを変更できます。 タグはアンパサンド (&) で区切ります。 例:
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/ --tagging "abc=1&bcd=2&……"
オブジェクトのタグ付けの詳細については、「object-tagging」をご参照ください。
オブジェクトのコピーと暗号化
オブジェクトをコピーするときに、オブジェクトを暗号化するサーバー側の暗号化方法を指定できます。 詳細については、「サーバー側の暗号化」をご参照ください。
オブジェクトをコピーし、サーバー側の暗号化方法を宛先オブジェクトのAES-256に設定します。
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/srcfolder2/ --meta=x-oss-server-side-encryption:AES256
オブジェクトをコピーし、サーバー側の暗号化方法を宛先オブジェクトのSSE-KMSに設定します。
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket2/desfolder/ --meta=x-oss-server-side-encryption:KMS
重要Key Management Service (KMS) を使用してオブジェクトを暗号化すると、OSSはそのオブジェクトの顧客マスターキー (CMK) をKMSに作成します。 KMS API操作が呼び出されると、少額の料金が請求されます。 詳細については、「KMSの課金」をご参照ください。
オブジェクトをコピーし、オブジェクトの暗号化方法を宛先オブジェクトのSSE-KMSに設定してから、CMK IDを指定します。
ossutil cp oss:// examplebucket1/examplefile.txt oss:// examplebucket2/desfolder/ -- meta=x-oss-server-side-encryption:KMS#x-oss-server-side-encryption-key-id:7bd6e2fe-cd0e-483e-acb0-f4b9e1 ******
バージョン管理が有効なバケット内のオブジェクトを復元する
バケットのバージョン管理を有効にすると、バケット内で上書きまたは削除されたオブジェクトは以前のバージョンとして保存されます。 cpコマンドに -- version-idを追加すると、以前のバージョンを最新バージョンで上書きできます。 例:
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket2/ --version-id CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE3MDRk
-- version-idオプションを使用するには、ls -- all-versionsコマンドを実行してオブジェクトのバージョンidを取得する必要があります。
-- version-idオプションは、バージョン管理が有効なバケット内のオブジェクトに対してのみ使用できます。 バケットのバージョン管理を有効にする方法の詳細については、「バケットバージョン管理」をご参照ください。
一般的なオプション
ossutilを使用して別のリージョンにあるバケットに切り替える場合は、-eオプションを追加して、バケットが配置されているリージョンのエンドポイントを指定します。 ossutilを使用して別のAlibaba Cloudアカウントに属するバケットに切り替える場合、-iオプションを追加して指定されたアカウントのAccessKey IDを指定し、-kオプションを追加して指定されたアカウントのAccessKey secretを指定します。
たとえば、次のコマンドを実行して、examplebucketという名前のソースバケットのルートディレクトリにあるsrcobject.pngオブジェクトをdestbucketという名前の宛先バケットにコピーできます。 宛先バケットは中国 (上海) リージョンにあり、別のAlibaba Cloudアカウントが所有しています。
ossutil cp oss://examplebucket/srcobject.png oss://destbucket -e oss-cn-shanghai.aliyuncs.com -i LTAI4Fw2NbDUCV8zYUzA**** -k 67DLVBkH7EamOjy2W5RVAHUY9H****
共通オプションの詳細については、「共通オプション」をご参照ください。