Quiero usar AWS S3 cli para copiar una estructura de directorio completa en un bucket de S3.
Hasta ahora, todo lo que he intentado copia los archivos al depósito, pero la estructura del directorio está contraída. (para decirlo de otra manera, cada archivo se copia en el directorio raíz del depósito)
El comando que uso es:
aws s3 cp --recursive ./logdata/ s3://bucketname/
También he intentado dejar de lado la barra diagonal en mi designación de origen (es decir, la copia del argumento). También he usado un comodín para designar todos los archivos ... cada cosa que intento simplemente copia los archivos de registro en el directorio raíz del depósito.
amazon-web-services
amazon-s3
agentev
fuente
fuente

aws s3 cp --recursive mylocalsrcdir s3://bucket/hace, simplemente colocará los archivos en su repositorio local en el "directorio raíz" del cubo. Si lo haceaws s3 cp --recursive mydirectory s3://bucket/mydirectory, recreará la estructura del directorio en el extremo de destino.Respuestas:
Creo que la sincronización es el método que deseas. Intenta esto en su lugar:
fuente
aws s3 sync ./logdata s3://bucketname/logdatagracias por el liderazgo. --- vMe enfrenté a este error al usar cualquiera de estos comandos.
Incluso pensé en montar el bucket S3 localmente y luego ejecutar rsync, incluso eso falló (o quedó bloqueado durante unas horas) ya que tengo miles de archivos.
Finalmente, s3cmd funcionó de maravilla .
Esto no solo funciona bien y muestra un resultado bastante detallado en la consola, sino que también carga archivos grandes en partes.
fuente
Lo siguiente funcionó para mí:
aws s3 cp ~/this_directory s3://bucketname/this_directory --recursiveAWS "creará"
this_directoryy copiará todos los contenidos locales en él.fuente
Use el siguiente script para copiar la estructura de carpetas:
fuente
No pude conseguir
s3 syncos3 cpal trabajo en una carpeta de 55 GB con miles de archivos y más de 2 docenas de subdirectorios dentro. Intentar sincronizar toda la carpeta solo provocaría que awscli falle en silencio sin cargar nada en el bucket.Terminé haciendo esto para sincronizar primero todos los subdirectorios y sus contenidos (se preserva la estructura de carpetas):
Luego hice esto para obtener los 30,000 archivos en el nivel superior:
Asegúrese de observar la carga en el servidor (protip que puede usar
wpara mostrar la carga) yctrl-zsuspender el comando si la carga es demasiado alta. (fgpara continuar de nuevo).Poner esto aquí en caso de que ayude a alguien en una situación similar.
Notas:
-mindepth 1excluye.-maxdepth 1evita que find enumere el contenido de los subdirectorios, ya que loss3 syncmaneja con éxito.cut -c 3-elimina el "./" del comienzo de cada resultado de find.fuente
Alternativamente, también puedes probar minio client aka mc
Espero que sea de ayuda.
PD: Soy uno de los contribuyentes al proyecto.
fuente
(Mejorando la solución de Shishir )
s3Copy.sh)/PATH/TO/s3Copy.sh /PATH/TO/ROOT/DIR/OF/SOURCE/FILESandDIRS PATH/OF/S3/BUCKETPor ejemplo, si
s3Copy.shestá almacenado en el directorio de inicio y quiero copiar todos los archivos y directorios ubicados en el directorio actual, entonces ejecuto esto:~/s3Copy.sh . s3://XXX/myBucketUsted puede modificar la secuencia de comandos para permitir otros argumentos de
s3 cptales como--include,--exclude...fuente