Seria bom ter uma função de conveniência --no-overwrite
para comandos aws s3 cp/mv
, que verificaria se o destino de destino ainda não existe antes de colocar um arquivo em um bucket s3.
É claro que essa lógica não pode ser garantida pela API da AWS (afaik...) e é vulnerável a condições de corrida, etc. Mas seria útil evitar erros não intencionais!
Marcando como uma solicitação de recurso. A parte complicada se fizermos isso em cp
ou mv
é que a CLI pode ter que consultar o S3 para ver se o arquivo existe antes de tentar carregá-lo. Portanto, pode fazer mais sentido adicioná-lo a sync
, pois já faz isso.
Eu gostaria de ver isso em cp
e/ou mv
também.
A razão pela qual eu não uso sync
para isso agora é que sync
tem grandes problemas de desempenho se o bucket de destino tiver muitos arquivos existentes no diretório de destino.
Quando você executa aws s3 cp --recursive newdir s3://bucket/parentdir/
, ele apenas visita cada um dos arquivos que está realmente copiando.
Quando você executa aws s3 sync newdir s3://bucket/parentdir/
, ele visita os arquivos que está copiando, mas também percorre toda a lista de arquivos em s3://bucket/parentdir
(que já pode conter milhares ou milhões de arquivos) e obtém metadados para cada arquivo existente .
Em um bucket de destino suficientemente grande, aws s3 cp --recursive
pode levar segundos e aws s3 sync
pode levar horas para copiar os mesmos dados.
Obviamente, corrigir sync
seria bom, mas se adicionar uma consulta "verificar se o arquivo já existe" a cp
é um problema mais tratável do que reformular o código sync
para torná-lo rápido, pode fazer sentido fazer isso em vez disso.
Eu também estou muito interessado neste recurso. Um prompt interativo opcional para sobrescrever arquivos também seria bom ter.
sim @sgrimm-sg, faz sentido. Também estou interessado em ver o comando CLI cp que pode realmente lidar com essas condições.
Seria extremamente útil que isso fosse uma opção em aws s3 sync
. rsync
tem esta funcionalidade disponível como --ignore-existing
. Minha preferência seria tentar usar os mesmos nomes de opções que rsync
, pois suspeito que muitas pessoas já estão familiarizadas com rsync
.
Bom Dia!
Estamos encerrando este problema aqui no GitHub, como parte de nossa migração para UserVoice para solicitações de recursos envolvendo a AWS CLI.
Isso nos permitirá obter os recursos mais importantes para você, facilitando a pesquisa e a exibição de suporte para os recursos mais importantes para você, sem diluir a conversa com relatórios de bugs.
Como uma rápida cartilha do UserVoice (se ainda não estiver familiarizado): depois que uma ideia é postada, as pessoas podem votar nas ideias e a equipe do produto responderá diretamente às sugestões mais populares.
Importamos solicitações de recursos existentes do GitHub - Pesquise esse problema lá!
E não se preocupe, esse problema ainda existirá no GitHub para o bem da posteridade. Como é uma importação somente de texto da postagem original para o UserVoice, ainda teremos em mente os comentários e discussões que já existem aqui no problema do GitHub.
O GitHub continuará sendo o canal para relatar bugs.
Mais uma vez, esse problema pode ser encontrado pesquisando o título em: https://aws.uservoice.com/forums/598381-aws-command-line-interface
-A equipe de SDKs e ferramentas da AWS
Essa entrada pode ser encontrada especificamente no UserVoice em: https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168406-add-no-overwrite-option-to-aws-s3- cp-mv
Relacionado:
Com base no feedback da comunidade, decidimos retornar solicitações de recursos para problemas do GitHub.
@jamesls que ótimo! você pode por favor responder à sugestão em mãos? --no-overwrite seria uma ótima adição e evitará envolver as chamadas com scripts
+1 para este problema. Proponho -n, --no-clobber para corresponder às opções de comando cp existentes do Linux.
Houve alguma implementação deste pedido? Tentando trabalhar com arquivos em lote do Windows para fazer backup local> S3, esse é o método mais fácil, um simples sem substituição ou sinalizador semelhante.
Alguma atualização sobre esse recurso?
Alguma atualização sobre esse recurso? Obrigado
Alguma atualização sobre esse recurso?
Alguma atualização sobre esse recurso?
sev3, +1
Realmente preciso desse recurso adicionado, pois a sincronização do S3 parece não carregar todos os arquivos.
Alguma atualização ou solução?
Alguma atualização ou solução?
Eu tive que escrever um script python para carregar todos os itens do bucket em uma matriz (lista), carregar todos os itens do diretório que quero sincronizar, comparar as matrizes e fazer upload dos itens locais que não estão na matriz S3 .
Eu tive que escrever um script python para carregar todos os itens do bucket em uma matriz (lista), carregar todos os itens do diretório que quero sincronizar, comparar as matrizes e fazer upload dos itens locais que não estão na matriz S3 .
@southpaw5271 - gostaria de compartilhar seu script e me poupar algum tempo? ; )
Eu tive que escrever um script python para carregar todos os itens do bucket em uma matriz (lista), carregar todos os itens do diretório que quero sincronizar, comparar as matrizes e fazer upload dos itens locais que não estão na matriz S3 .
@southpaw5271 - gostaria de compartilhar seu script e me poupar algum tempo? ; )
Parece que não tenho mais :( Desculpe!
Este sinalizador também seria valioso para o comando cp
, pois sync
não permite copiar um arquivo enquanto altera o nome de destino.
aws s3 cp --no-overwrite ./somefile s3://bucket/othername
Também precisamos da opção --no-overwrite de s3 para local. Fomos queimados por substituições acidentais de indivíduos bem-intencionados, e essa seria uma maneira muito apreciada de colocar um "guarda-corpo" para eles. Obrigado!
Qualquer atualização?
Alguma atualização sobre esse recurso? Obrigado
+1
+1
Estou migrando arquivos do sistema antigo. Eu tenho um script python que gera caminhos diferentes de acordo com as colunas db (ou seja, cada organização agora tem sua própria pasta em um bucket específico), então não posso confiar no comando sync. Eu poderia executar um script para fazer migrações parciais se um -skip-duplicate ou algum tipo de parâmetro estivesse disponível.
+1
Isso é muito necessário. Por que ainda não está lá?
+1
+10
Alguma atualização sobre esse recurso? Obrigado
Também votando para este recurso, por favor!
+1
+1
+1
++1
alguma atualização sobre isso?
+1
Eu não posso acreditar que ainda não é uma coisa. É quase impossível criar um armazenamento imutável no S3 :(
Iniciamos os dados copiados do bucket do S3 para a montagem linux local e o tamanho no destino é ~40 GB menor que o bucket do S3. Encontre maneiras de copiar apenas o que está faltando. Parece que não há uma maneira fácil de fazer isso em vez de copiar tudo.
Uma opção de aws s3 sync
que pode realizar algo semelhante é o sinalizador booleano --size-only
, que substituirá no destino somente se o tamanho for diferente entre a origem e o objeto de destino,
--size-only (boolean) Makes the size of each key the only criteria used
to decide whether to sync from source to destination.
O comando que usei,
aws s3 sync s3://<source bucket> s3://<destination bucket> --size-only
_Importante_: Sugiro fortemente executar o comando acima com o sinalizador booleano --dry-run
primeiro, para ver o que este comando pretende fazer antes de realmente executá-lo, especialmente se envolver seus sistemas de produção. Isso é uma abundância de cautela.
não me ajuda, esperando o #5456 ser endereçado pelo DH
Comentários muito úteis
Com base no feedback da comunidade, decidimos retornar solicitações de recursos para problemas do GitHub.