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/logdata
gracias 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 --recursive
AWS "creará"
this_directory
y copiará todos los contenidos locales en él.fuente
Use el siguiente script para copiar la estructura de carpetas:
fuente
No pude conseguir
s3 sync
os3 cp
al 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
w
para mostrar la carga) yctrl-z
suspender el comando si la carga es demasiado alta. (fg
para continuar de nuevo).Poner esto aquí en caso de que ayude a alguien en una situación similar.
Notas:
-mindepth 1
excluye.
-maxdepth 1
evita que find enumere el contenido de los subdirectorios, ya que loss3 sync
maneja 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/BUCKET
Por ejemplo, si
s3Copy.sh
está 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/myBucket
Usted puede modificar la secuencia de comandos para permitir otros argumentos de
s3 cp
tales como--include
,--exclude
...fuente