Desejo usar o AWS S3 cli para copiar uma estrutura de diretório completa para um bucket do S3.
Até agora, tudo o que tentei copia os arquivos para o bucket, mas a estrutura de diretórios está recolhida. (para dizer de outra forma, cada arquivo é copiado para o diretório raiz do bucket)
O comando que uso é:
aws s3 cp --recursive ./logdata/ s3://bucketname/
Eu também tentei deixar de fora a barra final na minha designação de fonte (ou seja, a cópia do argumento). Também usei um curinga para designar todos os arquivos... cada coisa que tento simplesmente copia os arquivos de log para o diretório raiz do bucket.
Eu acredito que a sincronização é o método que você deseja. Tente isso em vez disso:
O seguinte funcionou para mim:
aws s3 cp ~/this_directory s3://bucketname/this_directory --recursive
A AWS então "criará"
this_directory
e copiará todo o conteúdo local para ele.Eu enfrentei esse erro ao usar um desses comandos.
Eu até pensei em montar o bucket do S3 localmente e, em seguida, executar o rsync, mesmo que tenha falhado (ou tenha travado por algumas horas), pois tenho milhares de arquivos.
Finalmente, s3cmd funcionou como um encanto.
Isso não apenas faz o trabalho bem e mostra uma saída bastante detalhada no console, mas também carrega arquivos grandes em partes.
(Melhorando a solução de Shishir )
s3Copy.sh
)/PATH/TO/s3Copy.sh /PATH/TO/ROOT/DIR/OF/SOURCE/FILESandDIRS PATH/OF/S3/BUCKET
Por exemplo, se
s3Copy.sh
estiver armazenado no diretório inicial e eu quiser copiar todos os arquivos e diretórios localizados no diretório atual, executo isso:~/s3Copy.sh . s3://XXX/myBucket
Você pode modificar facilmente o script para permitir outros argumentos
s3 cp
como--include
,--exclude
, ...Use o seguinte script para copiar a estrutura de pastas:
Não consegui
s3 sync
ous3 cp
trabalhar em uma pasta de 55 GB com milhares de arquivos e mais de 2 dúzias de subdiretórios dentro. Tentar sincronizar a pasta inteira faria com que o awscli falhasse silenciosamente sem carregar nada no bucket.Acabei fazendo isso para primeiro sincronizar todos os subdiretórios e seus conteúdos (a estrutura da pasta é preservada):
Então eu fiz isso para obter os 30.000 arquivos no nível superior:
Certifique-se de observar a carga no servidor (protip que você pode usar
w
apenas para mostrar a carga) ectrl-z
suspender o comando se a carga ficar muito alta. (fg
para continuar de novo).Colocando isso aqui no caso de ajudar alguém em uma situação semelhante.
Notas:
-mindepth 1
exclui.
-maxdepth 1
impede find de listar o conteúdo de subdiretórios, uma vez ques3 sync
os trata com sucesso.cut -c 3-
remove o "./" do início de cada resultado de find.Alternativamente, você também pode tentar o cliente minio, também conhecido como mc
Espero que ajude.
PS: Eu sou um dos colaboradores do projeto.
Isso funciona para mim .. aws s3 sync mydir s3://rahuls-bucket/mydir