Aws-cli: Agregue la opción --no-overwrite a aws s3 cp/mv

Creado en 6 oct. 2017  ·  43Comentarios  ·  Fuente: aws/aws-cli

Sería bueno tener una función de conveniencia --no-overwrite para los comandos aws s3 cp/mv , que verificaría que el destino de destino aún no existe antes de colocar un archivo en un depósito s3.

Por supuesto, esta lógica no puede ser garantizada por la API de AWS (afaik...) y es vulnerable a las condiciones de carrera, etc. ¡Pero sería útil para evitar errores no intencionales!

feature-request s3

Comentario más útil

Según los comentarios de la comunidad, hemos decidido devolver las solicitudes de funciones a los problemas de GitHub.

Todos 43 comentarios

Marcado como una solicitud de función. La parte complicada si lo hicimos en cp o mv es que la CLI puede tener que consultar a S3 para ver si el archivo existe antes de intentar cargarlo. Entonces puede tener más sentido agregarlo a sync ya que ya lo hace.

Me gustaría ver esto en cp y/o mv también.

La razón por la que no uso sync para esto en este momento es que sync tiene problemas de rendimiento importantes si el depósito de destino tiene muchos archivos existentes en el directorio de destino.

Cuando ejecuta aws s3 cp --recursive newdir s3://bucket/parentdir/ , solo visita cada uno de los archivos que realmente está copiando.

Cuando ejecuta aws s3 sync newdir s3://bucket/parentdir/ , visita los archivos que está copiando, pero también recorre la lista completa de archivos en s3://bucket/parentdir (que ya puede contener miles o millones de archivos) y obtiene metadatos para cada archivo existente .

En un depósito de destino lo suficientemente grande, aws s3 cp --recursive puede tardar unos segundos y aws s3 sync puede tardar horas en copiar los mismos datos.

Obviamente, arreglar sync estaría bien, pero si agregar una consulta "compruebe si el archivo ya existe" a cp es un problema más manejable que renovar el código sync para hazlo rápido, podría tener sentido hacerlo en su lugar.

También estoy muy interesado en esta característica. También sería bueno tener un indicador interactivo opcional para sobrescribir archivos.

sí @sgrimm-sg, tiene sentido. También estoy interesado en ver el comando CLI cp que realmente puede manejar estas condiciones.

Sería extremadamente útil que esta fuera una opción en aws s3 sync . rsync tiene esta funcionalidad disponible como --ignore-existing . Mi preferencia sería tratar de usar los mismos nombres de opción que rsync , ya que sospecho que hay mucha gente que ya está familiarizada con rsync .

¡Buenos días!

Estamos cerrando este problema aquí en GitHub, como parte de nuestra migración a UserVoice para las solicitudes de características relacionadas con la CLI de AWS.

Esto nos permitirá obtener las funciones más importantes para usted, al facilitar la búsqueda y mostrar soporte para las funciones que más le interesan, sin diluir la conversación con informes de errores.

Como introducción rápida a UserVoice (si aún no está familiarizado): después de publicar una idea, las personas pueden votar sobre las ideas y el equipo del producto responderá directamente a las sugerencias más populares.

Hemos importado solicitudes de funciones existentes de GitHub. ¡Busque este problema allí!

Y no se preocupe, este problema seguirá existiendo en GitHub por el bien de la posteridad. Como se trata de una importación de solo texto de la publicación original en UserVoice, seguiremos teniendo en cuenta los comentarios y la discusión que ya existen aquí sobre el problema de GitHub.

GitHub seguirá siendo el canal para informar errores.

Una vez más, este problema ahora se puede encontrar buscando el título en: https://aws.uservoice.com/forums/598381-aws-command-line-interface

-El equipo de herramientas y SDK de AWS

Esta entrada se puede encontrar específicamente en UserVoice en: https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168406-add-no-overwrite-option-to-aws-s3- cp-mv

Relacionados:

Según los comentarios de la comunidad, hemos decidido devolver las solicitudes de funciones a los problemas de GitHub.

@jamesls eso es genial! ¿Puede por favor responder a la sugerencia en cuestión? --no-overwrite sería una gran adición y evitará envolver las llamadas con scripts

+1 a este problema. Propongo -n, --no-clobber para que coincida con las opciones de comando cp de Linux existentes.

¿Ha habido alguna implementación de esta solicitud? Intentando trabajar con archivos por lotes de Windows para hacer una copia de seguridad local> S3, este es el método más fácil, un indicador simple de no sobrescribir o similar.

¿Alguna actualización con respecto a esta función?

¿Alguna actualización con respecto a esta función? Gracias

¿Alguna actualización con respecto a esta función?

¿Alguna actualización con respecto a esta función?

grave3, +1

Realmente necesito agregar esta función ya que la sincronización S3 no parece cargar todos los archivos.

¿Alguna actualización o solución?

¿Alguna actualización o solución?

Tuve que escribir una secuencia de comandos de python para cargar todos los elementos del depósito en una matriz (lista), luego cargar todos los elementos del directorio que quiero sincronizar, luego comparar las matrices y cargar los elementos locales que no están en la matriz S3 .

Tuve que escribir una secuencia de comandos de python para cargar todos los elementos del depósito en una matriz (lista), luego cargar todos los elementos del directorio que quiero sincronizar, luego comparar las matrices y cargar los elementos locales que no están en la matriz S3 .

@ southpaw5271 : ¿quieres compartir tu guión y ahorrarme algo de tiempo? ; )

Tuve que escribir una secuencia de comandos de python para cargar todos los elementos del depósito en una matriz (lista), luego cargar todos los elementos del directorio que quiero sincronizar, luego comparar las matrices y cargar los elementos locales que no están en la matriz S3 .

@ southpaw5271 : ¿quieres compartir tu guión y ahorrarme algo de tiempo? ; )

Parece que ya no lo tengo :( ¡Lo siento!

Esta bandera también sería valiosa para el comando cp , ya que sync no permite copiar un archivo mientras se cambia el nombre de destino.

aws s3 cp --no-overwrite ./somefile s3://bucket/othername

También necesitamos la opción --no-overwrite de s3 a local. Hemos sido quemados por sobrescrituras accidentales de personas bien intencionadas, y esta sería una forma muy apreciada de ponerles una "barandilla". ¡Gracias!

¿cualquier actualización?

¿Alguna actualización con respecto a esta función? Gracias

+1

+1

Estoy migrando archivos del sistema anterior. Tengo una secuencia de comandos de python que genera diferentes rutas según las columnas de la base de datos (es decir, cada organización ahora tiene su propia carpeta en un depósito específico), por lo que no puedo confiar en el comando de sincronización. Podría ejecutar un script para realizar migraciones parciales si estuviera disponible un -skip-duplicate o algún tipo de parámetro.

+1

Esto es muy necesario. ¿Por qué no está ya allí?

+1

+10

¿Alguna actualización con respecto a esta función? Gracias

¡También vota por esta función, por favor!

+1

+1

+1

++1

alguna actualización sobre esto?

+1

No puedo creer que todavía no sea una cosa. Es casi imposible crear un almacenamiento inmutable en S3 :(

Hemos iniciado la copia de datos del depósito S3 al montaje local de Linux y el tamaño en el destino es ~40 GB menos que el depósito S3. Encuentre formas de copiar solo lo que falta. Parece que no hay una manera fácil de hacerlo en lugar de copiar todo...

Una opción de aws s3 sync que puede lograr algo similar es el indicador booleano --size-only , que se anulará en el destino solo si el tamaño difiere entre el objeto de origen y el de destino.

 --size-only (boolean) Makes the size of each key the only criteria used
       to decide whether to sync from source to destination.

El comando que usé,

aws s3 sync s3://<source bucket> s3://<destination bucket> --size-only 

_Importante_: Sugerimos encarecidamente ejecutar el comando anterior con el indicador booleano --dry-run primero, para ver qué pretende hacer este comando antes de ejecutarlo, especialmente si involucra sus sistemas de producción. Esto es por precaución.

no me ayuda, esperando que #5456 sea abordado por DH

¿Fue útil esta página
0 / 5 - 0 calificaciones