Acredito que a sincronização é o método que você deseja. Tente isso:
aws s3 sync ./logdata s3://bucketname/
Eu quero usar o AWS S3 cli para copiar uma estrutura de diretório completa para um bucket S3.
Até agora, tudo o que tentei copia os arquivos para o intervalo, mas a estrutura de diretórios é recolhida. (para dizer isso de outra forma, cada arquivo é copiado para o diretório raiz do bucket)
O comando que eu uso é:
aws s3 cp --recursive ./logdata/ s3://bucketname/
Eu também tentei deixar de lado a barra da minha designação de fonte (isto é, a cópia do argumento). Eu 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 intervalo.
Acredito que a sincronização é o método que você deseja. Tente isso:
aws s3 sync ./logdata s3://bucketname/
Eu havia enfrentado este erro ao usar um desses comandos.
$ aws s3 cp --recursive /local/dir s3://s3bucket/
OR
$ aws s3 sync /local/dir s3://s3bucket/
Eu até pensei em montar o bucket do S3 localmente e depois rodar o rsync, mesmo que tenha falhado (ou fiquei pendurado por algumas horas) já que tenho milhares de arquivos.
Finalmente, o s3cmd funcionou como um encanto.
s3cmd sync /local/dir/ --delete-removed s3://s3bucket/ --exclude="some_file" --exclude="*directory*" --progress --no-preserve
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.
O seguinte funcionou para mim:
aws s3 cp ~/this_directory s3://bucketname/this_directory --recursive
O AWS irá "fazer" this_directory
e copiar todo o conteúdo local para ele.
Use o seguinte script para copiar a estrutura de pastas:
s3Folder="s3://xyz.abc.com/asdf";
for entry in "$asset_directory"*
do
echo "Processing - $entry"
if [[ -d $entry ]]; then
echo "directory"
aws s3 cp --recursive "./$entry" "$s3Folder/$entry/"
else
echo "file"
aws s3 cp "./$entry" "$s3Folder/"
fi
done
Como alternativa, você também pode tentar o minio client, também conhecido como mc
$ mc cp Desktop/test/test/test.txt s3/miniocloud/Desktop/test/test/
Espero que ajude.
PS: Eu sou um dos contribuintes do projeto.
Não consegui obter s3 sync
ou s3 cp
para trabalhar em uma pasta de 55 GB com milhares de arquivos e mais de duas dúzias de subdiretórios dentro dele. Tentar sincronizar a pasta inteira só faria com que o awscli falhasse silenciosamente sem fazer upload de nada para o intervalo.
Acabou fazendo isso para primeiro sincronizar todos os subdiretórios e seus conteúdos (a estrutura de pastas é preservada):
nice find . -mindepth 1 -maxdepth 1 -type d | cut -c 3- | while read line; do aws s3 sync $"$line" "s3://bucketname/$line"; done
Então eu fiz isso para obter os 30.000 arquivos no nível superior:
nice find . -mindepth 1 -maxdepth 1 -type f | cut -c 3- | while read line; do aws s3 cp "$line" "s3://bucketname/";
Certifique-se de observar a carga no servidor (protip que você pode usar w
para mostrar apenas a carga) e ctrl-z
para 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 o achado de listar o conteúdo dos subdiretórios, pois s3 sync
os manipula com êxito.
cut -c 3-
remove o "./" do início de cada resultado da pesquisa.