Utilice el comando cp para copiar archivos de un bucket de origen a un bucket de destino en la misma región, o a otro directorio dentro del mismo bucket.
Precauciones
El comando cp no admite la copia de archivos entre cuentas o regiones. Para copiar o migrar archivos entre cuentas o regiones, utilice Data Online Migration.
Este comando solo copia archivos completos y no admite la copia parcial de archivos.
A partir de la versión 1.6.16 de ossutil, puede usar ossutil como nombre del binario en la línea de comandos sin necesidad de renombrarlo. En versiones anteriores a la 1.6.16, debe renombrar el binario para que coincida con su sistema operativo. Para obtener más información, consulte Command-line tool ossutil command reference.
Permisos
De forma predeterminada, solo la cuenta de Alibaba Cloud tiene permiso para ejecutar todas las operaciones de API. Para ejecutar este comando, un usuario RAM o un rol RAM debe recibir los permisos necesarios por parte de la cuenta de Alibaba Cloud o de un administrador mediante una RAM Policy o una Bucket Policy.
|
Acción de API |
Descripción |
|
|
Copiar un objeto entre buckets en la misma región. |
|
|
|
|
|
Opcional. Este permiso es necesario para copiar una versión específica de un objeto. |
|
|
Opcional. Estos permisos son necesarios si la operación de copia implica etiquetado de objetos. |
|
|
|
|
|
Opcional. Este permiso es necesario si la operación de copia implica etiquetas de una versión específica del objeto. |
|
|
Opcional. Estos permisos son necesarios si la operación de copia implica cifrado del lado del servidor con KMS. |
|
|
Sintaxis del comando
ossutil cp cloud_url cloud_url [options]
La siguiente tabla describe los parámetros y las opciones.
|
Parámetro |
Descripción |
|
cloud_url |
Las rutas de OSS de origen y destino. El formato es |
|
-r, --recursive |
Realiza una operación recursiva. Si especifica esta opción, ossutil ejecuta la operación en todos los objetos coincidentes del bucket. De lo contrario, la operación se realiza únicamente en el objeto especificado. |
|
-f --force |
Fuerza la operación sin solicitar confirmación. |
|
-u,--update |
Copia un objeto solo si el objeto de destino no existe, o si la fecha de última modificación del objeto de origen es posterior a la del objeto de destino. |
|
--disable-ignore-error |
No ignora errores durante las operaciones por lotes. |
|
--only-current-dir |
Copia únicamente los archivos del directorio actual. Se ignoran los subdirectorios y los archivos que contienen. |
|
-bigfile-threshold |
El umbral de tamaño para la copia reanudable. Unidad: bytes. Valor predeterminado: 100 MB Valores válidos: 0 a 9223372036854775807 |
|
--part-size |
El tamaño de parte. Unidad: bytes. De forma predeterminada, ossutil calcula un tamaño de parte adecuado según el tamaño del archivo. Valores válidos: 1 a 9223372036854775807 |
|
--checkpoint-dir |
El directorio que almacena la información de punto de control para una copia reanudable. Si falla una copia reanudable, ossutil crea automáticamente un directorio llamado |
|
--encoding-type |
El tipo de codificación del nombre de archivo. Establezca el valor en url. Si no especifica esta opción, el nombre de archivo no se codifica. |
|
--include |
Incluye todos los archivos que cumplen con la condición especificada. |
|
--exclude |
Excluye todos los archivos que cumplen con la condición especificada. |
|
--meta |
Los metadatos del archivo. El formato es |
|
--acl |
La lista de control de acceso (ACL) del archivo. Valores válidos:
|
|
--disable-crc64 |
Deshabilita la verificación de redundancia cíclica de 64 bits (CRC-64) para los datos. De forma predeterminada, CRC-64 está habilitado para la transferencia de datos en ossutil. |
|
--payer |
El método de pago para la solicitud. Si desea que el solicitante pague el tráfico y las solicitudes al acceder a recursos en la ruta especificada, establezca esta opción en requester. |
|
-j,--jobs |
El número de tareas simultáneas para operaciones por lotes. Valor predeterminado: 3. Valores válidos: 1 a 10000. |
|
--parallel |
El número de tareas simultáneas para la operación de un solo archivo. Valores válidos: 1 a 10000. Si no establece esta opción, ossutil determina el valor según el tipo de operación y el tamaño del archivo. |
|
--version-id |
Copia una versión específica de un archivo. Esta opción solo está disponible para buckets con versionado habilitado. |
|
--start-time |
Una marca de tiempo UNIX. Si especifica esta opción, se ignoran los objetos cuya última actualización sea anterior a esta hora. Nota
Solo ossutil 1.7.18 y versiones posteriores admiten este parámetro. Para obtener más información sobre cómo actualizar, consulte update (Upgrade ossutil). |
|
--end-time |
Una marca de tiempo UNIX. Si especifica esta opción, se ignoran los objetos cuya última actualización sea posterior a esta hora. Nota
|
Para obtener más información sobre otras opciones comunes de este comando, consulte Common options.
Si la concurrencia predeterminada no satisface sus requisitos de rendimiento, puede ajustar las opciones -j, --jobs y --parallel para modificar el desempeño. De forma predeterminada, ossutil calcula el valor de parallel según el tamaño del archivo. Cuando transfiere archivos grandes por lotes, la concurrencia real es el valor de jobs × el valor de parallel.
Si los recursos (como red, memoria y CPU) de la instancia ECS o del servidor que ejecuta el comando son limitados, se recomienda reducir la concurrencia a un valor menor que 100. Si los recursos no se aprovechan por completo, puede aumentar la concurrencia según sea necesario.
Una concurrencia alta puede disminuir el rendimiento o incluso causar errores EOF debido a la sobrecarga por cambio de hilos y la competencia de recursos. Ajuste las opciones -j, --jobs y --parallel según los recursos reales de su máquina. Al realizar pruebas de estrés, se recomienda comenzar con una concurrencia baja e incrementarla gradualmente hasta encontrar el valor óptimo.
Ejemplos de uso
Los siguientes ejemplos corresponden a un sistema Linux. Modifique los parámetros según su sistema operativo y entorno real. Los ejemplos asumen el siguiente entorno:
Bucket de origen: examplebucket1
Directorio de origen 1 en el bucket de origen: srcfolder1
Directorio de origen 2 en el bucket de origen: srcfolder2
Bucket de destino: examplebucket2
Directorio de destino en el bucket de destino: desfolder
Copiar un solo archivo
Copie un archivo de un directorio a otro dentro del mismo bucket y renombre el archivo como example.txt.
ossutil cp oss://examplebucket1/srcfolder1/examplefile.txt oss://examplebucket1/srcfolder2/example.txt
Copiar varios archivos por lotes
Al copiar archivos, si la ruta de origen no termina con una barra diagonal (/), todos los archivos que coinciden con el prefijo especificado se copian al bucket de destino. Si la ruta de origen termina con una barra diagonal (/), solo los archivos del directorio especificado se copian al bucket de destino.
Suponga que el directorio srcfolder1 en el bucket de origen examplebucket1 contiene los siguientes archivos:
srcfolder1/exampleobject1.txt
srcfolder1/exampleobject2.png
srcfolder1/dir1/
srcfolder1/dir1/exampleobject3.jpg
srcfolder1/dir2/
srcfolder1/dir2/exampleobject4.jpg
-
La ruta de origen no termina con una barra diagonal (/)
ossutil cp oss://examplebucket1/srcfolder1 oss://examplebucket2 -rUna vez completada la copia, los siguientes archivos se agregan al bucket de destino
examplebucket2:srcfolder1/exampleobject1.txt srcfolder1/exampleobject2.png srcfolder1/dir1/ srcfolder1/dir1/exampleobject3.jpg srcfolder1/dir2/ srcfolder1/dir2/exampleobject4.jpg -
La ruta de origen termina con una barra diagonal (/).
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2 -rUna vez completada la copia, los siguientes archivos están presentes en el bucket de destino
examplebucket2:exampleobject1.txt exampleobject2.png dir1/ dir1/exampleobject3.jpg dir2/ dir2/exampleobject4.jpg -
Copiar archivos incrementales
Durante una copia por lotes, si especifica la opción --update, ossutil copia un objeto solo si el objeto de destino no existe o si la fecha de última modificación del objeto de origen es posterior a la del objeto de destino. El comando es el siguiente:
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2/path2/ -r --updatePuede utilizar esta opción para realizar una copia incremental, omitiendo los archivos que ya se copiaron correctamente al reintentar una copia por lotes fallida.
-
Copiar solo archivos en el directorio actual e ignorar subdirectorios
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/srcfolder2/ --only-current-dir -r
Copiar archivos dentro de un rango de tiempo específico
Copie únicamente los archivos en srcfolder1 cuya última modificación ocurrió entre las 10:09:18 del 31 de octubre de 2023 (UTC+8) y las 12:55:58 del 31 de octubre de 2023 (UTC+8).
ossutil cp -r oss://examplebucket1/srcfolder1/ oss://examplebucket2/path2/ --start-time 1698718158 --end-time 1698728158
Copiar archivos que cumplen condiciones específicas
Utilice los parámetros --include y --exclude para copiar solo archivos que cumplen condiciones específicas.
-
Copiar todos los archivos que no tienen formato JPG.
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2/desfolder/ --exclude "*.jpg" -r -
Copiar todos los archivos cuyos nombres contienen abc pero que no tienen formato JPG ni TXT
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket2/desfolder/ --include "*abc*" --exclude "*.jpg" --exclude "*.txt" -r
Copiar un archivo y modificar sus metadatos
Utilice la opción --meta para modificar los metadatos del objeto. El formato es header:value#header:value....
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/ --meta=Cache-Control:no-cache
Copiar un archivo y especificar el modo de pago por solicitante
Copie un archivo de un bucket de origen a un bucket de destino y especifique el modo de pago por solicitante.
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket2/desfolder/ --payer=requester
Copiar un archivo y cambiar su clase de almacenamiento
Al sobrescribir un objeto, puede agregar la opción --meta para modificar su clase de almacenamiento. Las clases de almacenamiento compatibles son:
-
Standard: Standard
IA: Infrequent Access
Archive: Archive Storage
ColdArchive: Cold Archive
DeepColdArchive: Deep Cold Archive
Para obtener más información sobre las clases de almacenamiento, consulte 存储类型.
De forma predeterminada, cuando utiliza la opción --meta para cambiar la clase de almacenamiento, los metadatos personalizados existentes del objeto se sobrescriben. Para conservar los metadatos personalizados existentes al cambiar la clase de almacenamiento, primero debe usar la opción x-oss-metadata-directive:COPY para retain the metadata, y luego change the storage class.
Sobrescribir metadatos personalizados existentes del objeto
-
Cambiar la clase de almacenamiento de un archivo específico a Archive Storage
ossutil cp oss://examplebucket1/srcfolder1/examplefile.txt oss://examplebucket1/srcfolder1/examplefile.txt --meta X-oss-Storage-Class:Archive -
Cambiar la clase de almacenamiento de todos los archivos en una carpeta específica a Standard
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/srcfolder1/ --meta X-oss-Storage-Class:Standard -r
Conservar metadatos personalizados existentes del objeto
-
Conservar los metadatos de un solo archivo existente.
ossutil cp oss://examplebucket1/srcfolder1/examplefile.txt oss://examplebucket1/srcfolder1/examplefile.txt --meta x-oss-metadata-directive:COPY -
Conservar los metadatos de varios archivos existentes.
ossutil cp oss://examplebucket1/srcfolder1/ oss://examplebucket1/srcfolder1/ --meta x-oss-metadata-directive:COPY -r -f
Cuando utiliza el comando cp para cambiar la clase de almacenamiento de un objeto, se le cobra por solicitudes PUT según la clase de almacenamiento de origen del objeto. Los cargos se facturan al bucket de destino.
Si convierte un objeto a la clase de almacenamiento Infrequent Access, Archive, Cold Archive o Deep Cold Archive y el objeto se almacena durante un periodo inferior a la duración mínima de almacenamiento, se aplica un cargo por eliminación anticipada. Para obtener más información, consulte Storage fees.
Para convertir un objeto de Archive Storage, Cold Archive o Deep Cold Archive a Standard o Infrequent Access mediante el comando cp, primero debe restaurar el objeto. Para restaurar el objeto, utilice el comando restore (restore an object). Una vez restaurado el objeto, puede usar el comando cp para cambiar su clase de almacenamiento. Sin embargo, si real-time access of Archive objects está habilitado, puede cambiar la clase de almacenamiento de objetos Archive Storage sin restaurarlos.
Cuando utiliza el comando cp para cambiar la clase de almacenamiento de un archivo mayor a 100 MB, ossutil calcula un tamaño de parte adecuado según el tamaño del archivo de forma predeterminada. Si el tamaño automático de parte no satisface sus necesidades, puede usar la opción --part-size para especificar un tamaño de parte. Asegúrese de que el número de partes no exceda 10,000.
Copiar un archivo y establecer etiquetas
Al sobrescribir un archivo, puede agregar la opción --tagging para añadir o modificar etiquetas de objeto. Separe múltiples etiquetas con ampersands (&). El comando es el siguiente:
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/ --tagging "abc=1&bcd=2&……"
Para obtener más información sobre el etiquetado de objetos, consulte object-tagging (Object tagging).
Copiar un archivo y configurar el cifrado del lado del servidor
Puede especificar un método de cifrado del lado del servidor para cifrar un archivo al copiarlo a un bucket. Para obtener más información sobre el cifrado del lado del servidor, consulte Server-side encryption.
-
Copiar un archivo y especificar AES256 como método de cifrado
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/srcfolder2/ --meta=x-oss-server-side-encryption:AES256 -
Copiar un archivo y especificar KMS como método de cifrado
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket2/desfolder/ --meta=x-oss-server-side-encryption:KMSImportanteCuando utiliza KMS para el cifrado, OSS llama a KMS para generar una clave maestra para el archivo. Esta acción genera un costo por llamadas a la API de KMS. Para obtener más información, consulte KMS billing.
-
Copiar un archivo y especificar el ID de CMK para el cifrado KMS.
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******
La opción --meta aplica a ossutil 1.x. Para ossutil 2.x, utilice el siguiente comando en su lugar:
ossutil api copy-object --server-side-encryption SM4
Restaurar una versión histórica de un archivo
Después de habilitar el versionado para un bucket, los objetos sobrescritos y eliminados se guardan como versiones históricas. Puede agregar la opción --version-id al comando cp para restaurar una versión histórica, lo cual sobrescribe la versión actual.
Primero, utilice el comando ls --all-versions para recuperar todos los ID de versión del objeto. Luego, use la opción --version-id para copiar una versión específica.
La opción --version-id solo puede utilizarse en buckets con versionado habilitado. Para obtener más información sobre el comando para habilitar el versionado en un bucket, consulte bucket-versioning (Versioning).
ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket2/ --version-id CAEQARiBgID8rumR2hYiIGUyOTAyZGY2MzU5MjQ5ZjlhYzQzZjNlYTAyZDE3MDRk
Copia entre cuentas
Utilice las opciones comunes -e, -i y -k para copiar el archivo srcobject.png desde el directorio raíz del bucket de origen examplebucket en la región China (Shanghai), perteneciente a otra cuenta de Alibaba Cloud, hacia el bucket de destino destbucket.
Debe especificar el Endpoint correspondiente a la región donde se encuentra el bucket. Para obtener más información, consulte Regions and Endpoints.
ossutil cp oss://examplebucket/srcobject.png oss://destbucket -e oss-cn-shanghai.aliyuncs.com -i yourAccessKeyID -k yourAccessKeySecret
Consejo de seguridad : Utilizar una AccessKey en la línea de comandos representa un riesgo de seguridad. Para tareas automatizadas o de larga duración, se recomienda crear un rol RAM para la cuenta de origen y otorgar a la cuenta de destino permisos para asumir dicho rol RAM, logrando así un acceso entre cuentas más seguro.