Aws-cli: aws s3 sync no sincroniza la estructura de carpetas s3 localmente

Creado en 12 sept. 2014  ·  100Comentarios  ·  Fuente: aws/aws-cli

La sincronización de aws s3 no sincroniza completamente la estructura de carpetas de S3 localmente, incluso si la uso con argumentos --delete o --recursive:

aws --versión
aws-cli / 1.4.3 Python / 2.7.6 Linux / 3.13.0-35-genérico

$ aws s3 ls s3: //s3.testbucket
$ aws s3 ls s3: //s3.testbucket/
$ mkdir s3.testfolder
$ mkdir s3.testfolder / test1
$ aws s3 sync ./s3.testfolder s3: //s3.testbucket/
$ aws s3 ls s3: //s3.testbucket/
$ touch s3.testfolder / test1 / 1
$ aws s3 sync ./s3.testfolder/ s3: //s3.testbucket/
upload: s3.testfolder / test1 / 1 to s3: //s3.testbucket/test1/1
$ aws s3 sync ./s3.testfolder s3: //s3.testbucket/
$ mkdir ./s3.testfolder/test-to-delete
$ aws s3 sync s3: //s3.testbucket/ ./s3.testfolder/ --delete --recursive
$ aws s3 sync s3: //s3.testbucket/ ./s3.testfolder/ --delete
$ ls -lah ./s3.testfolder/
total 60K
drwxrwxr-x 4 tobi tobi 4.0K szept 12 15:24.
drwx ------ 71 tobi tobi 44K szept 12 15:22 ..
drwxrwxr-x 2 tobi tobi 4.0K szept 12 15:23 test1
drwxrwxr-x 2 tobi tobi 4.0K szept 12 15:24 prueba para eliminar

$ aws s3 ls s3: //s3.testbucket/
PRE prueba1 /

feature-request s3 s3sync

Comentario más útil

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

Todos 100 comentarios

Este comportamiento es conocido. La razón por la que el comando sync comporta de esta manera es que s3 no usa directorios físicamente. Solo hay cubos y objetos. Los objetos tienen prefijos que actúan como directorios, pero s3 no designa un objeto físico específico para que sea un directorio.

Por lo tanto, cuando se produce la sincronización, solo se transfieren archivos a s3 porque s3 no tiene directorios físicos. Entonces, cuando intenta sincronizar directorios vacíos, no se carga nada porque no hay archivos en ellos. Una vez que coloque los elementos en el directorio, se cargará el archivo (con el prefijo que representa el directorio).

Gracias Kyle, está claro. Sé cómo almacena S3 los archivos, pero a veces necesitamos la misma estructura de directorios en varios lugares, incluso si hay algunos vacíos o eliminarlos si ya no los necesitamos.
Un buen ejemplo si tiene una estructura de directorio compleja con una gran cantidad de contenido localmente de lo que sincronizó con S3. Después de eso, un mecanismo automatizado sincroniza esta estructura periódicamente con varias instancias en ejecución. Mantienes actualizado (borras) la mayor parte del contenido de S3 y luego el automatismo se vuelve a sincronizar con los lugares donde lo usaste antes. Desafortunadamente, encontrará que la estructura de directorios compleja original permanece para siempre en los destinos de sincronización, lo que puede causar confusión si desea verificarlo o si su programa intenta usar estas carpetas vacías porque necesita siempre lo mismo en todas partes. Además, las personas que lo usan con las opciones --delete pueden usar el equivalente "rsync" antes en Linux, que mantiene las carpetas sincronizadas, por lo que cuenta con la misma operación.
Creo que no sería difícil implementar un interruptor u opción para que la herramienta aws detecte de alguna manera si un objeto S3 es un archivo o carpeta (lista, tamaño, etc.) y crearlos / eliminarlos localmente o en un depósito S3 (p. Ej. list (bucket.list ("", "/"))?

Eso tiene sentido. Buscará agregarle una característica.

Esto también sería muy útil para nuestra situación. Si se agrega como una opción (--sync-empty-directory), las personas podrían optar por usarlo cuando sea necesario.

+1 Necesito esta función con urgencia

+1. Me gustaría usarlo.

+1

También me sorprendió este comportamiento, dado que se llama "sincronización".
Puedo solucionar esto en mi caso de uso particular, pero los futuros usuarios podrían evitarse el dolor :)

¡+1 en poder sincronizar la estructura de directorios! Si elimina una carpeta, solo elimina el contenido, pero deja la carpeta atrás ...

+1. Yo tengo las mismas necesidades.

+1: sorprende que aún no se haya implementado. Claro, en mi caso no importa demasiado, y puedo solucionarlo (o simplemente usar archivos de marcador de posición al crear estructuras), pero sería una ventaja tenerlo compatible con s3 sync o s3 cp.

+1

s3cmd sync mantiene la estructura de la carpeta pero, por lo tanto, tiene algunos problemas al otorgar acceso durante la sincronización, por lo que es necesario ejecutar otro s3cmd setacl --recursive después ...

+1

+1

+1

Gracias a todos por la retroalimentación. Creo que la mejor opción que he visto es agregar una opción --sync-empty-directories . Vamos a hacer eso.

@jamesls Espero funcionalidades similares a rsync, pero s3 como almacenamiento de objetos definitivamente no es lo mismo.

+1

+1

¿Alguna línea de tiempo para esta función?

Como solución temporal, agregué un archivo .s3keep vacío a los directorios vacíos y me funciona. Este es un truco que suelo usar para engañar a git para que no trate los directorios vacíos como si fueran vacíos :)

¿Esto también permitirá "eliminar / eliminar" directorios vacíos en S3?

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

_ Tiene mucho sentido durante las migraciones de datos a s3._

+1

+1 Acabo de ser aplastado por esto ... Arg ...

+1

+10
Es posible solucionar esto con archivos ficticios, pero sería más limpio si hubiera una opción para forzar la sincronización de un prefijo vacío.

+1. Caso de uso: hacer una copia de seguridad de un repositorio svn.

Más generalmente:
aws s3 sincronización cosa
sincronización aws s3cosa_copia

Esperaba que thing_copy coincidiera exactamente con la cosa.

+1

+1

+1

+1 necesita eliminar directorios vacíos

¿Cómo está el progreso de agregar esta opción --sync-empty-directories ?
¿Algún comentario del equipo de AWS?
Gracias.

+1 sería una característica muy útil para una herramienta muy útil

+1

+1 (Yo también deseo que esta característica se haya implementado y deseo que Github.com tenga una interfaz similar a StackOverflow.com para "votar" sobre problemas / características).

+1

+1

+1

+1

+1

2+ años después y todavía no ha sucedido ..? lo hará alguna vez? = /

+1

+1

+1

+1

+1000

+1

Investigué un poco sobre cómo podría implementarse esto. Todos los comandos de s3 eventualmente terminan usando TransferManager de la biblioteca s3transfer . (al que se hace referencia aquí )

Para admitir la adición de una carpeta con PutObject, podemos enviar una cadena vacía en el parámetro Body. Sin embargo, no sé si esto es oficialmente compatible. Implementé esto aquí:
https://github.com/svleeuwen/s3transfer/commit/b7d3745a995a75c5262950bb798c8c57e481c2b3

Me gustaría recibir comentarios sobre esto de un mantenedor antes de continuar.

+1

mi solución fue montar mi cubo con s3fs y rsync desde el montaje s3 a un directorio en mi directorio de inicio.

+1

+1 realmente necesito esto ...

+1

¿Abierto desde 2014? ¿En serio? : no divertido:

+1

+1

+1

+1

+1

+1

+1

+1

+1

@thenetimp Esta solución está bien para cubos pequeños. Estamos usando un balde con más de 15 TB. S3FS se vuelve horriblemente lento con cubos más grandes.

+1

¡Buenos días!

Cerramos este problema aquí en GitHub, como parte de nuestra migración a UserVoice para solicitudes de funciones relacionadas con la AWS CLI.

Esto nos permitirá ofrecerle las funciones más importantes, 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 no está familiarizado): después de que se publica una idea, la gente puede votar sobre las ideas y el equipo de producto responderá directamente a las sugerencias más populares.

Hemos importado solicitudes de funciones existentes desde GitHub: busque este problema allí.

Y no se preocupe, este problema seguirá existiendo en GitHub por el bien de la posteridad. Como es 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/33168436-aws-s3-sync-does-not-synchronize-s3- carpeta-estructura

gran trabajo Andre, cierra un problema y danos un enlace que no esté relacionado con el problema. De todas las publicaciones inútiles

El texto estándar genérico es decepcionante. Creo que la línea entre la solicitud de funciones y un informe de error puede ser bastante borrosa. Para evitar que las personas busquen la publicación de UserVoice para esta solicitud de función, está disponible en https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168436-aws-s3-sync-does-not -sincronizar-s3-carpeta-estructura

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

+1

+1

+1

+1

+1

+1

+1. Sería una buena característica agregar.

+1

+1

Mismo problema
awscli == 1.16.74

+1

-1

El comando de sincronización de aws s3 ya es recursivo, por lo que no hay necesidad de una opción recursiva. Además, el comando de sincronización solo copia las cosas que aún no existen en el destino. Si apunta a una carpeta, sincronizará de forma recursiva todo lo que hay dentro que aún no existe en su destino de destino. Esto es diferente al comando aws s3 cp. El comando cp copia todo lo que le indique, independientemente de que ya exista en el objetivo. El comando cp / mv / rb toma una opción --recursive para copiar / mover / eliminar carpetas / archivos de forma recursiva. Gracias

@ 3ggaurav el problema es originalmente de 2014 cuando recuerdo que sync tenía una opción --recursive .

Además, si va a citar textualmente una respuesta de desbordamiento de pila, generalmente es una buena práctica hacer referencia a ella / darle crédito.

La respuesta de desbordamiento de pila está aquí.

¿Todavía no hay progreso en esto?

+1

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