Verifique se o arquivo existe no S3 Bucket

2

Este diretório /data/files/ tem milhares de arquivos como:

1test
2test
3test

[...]

60000test
60001test

Também estou enviando-os para um bucket do S3 (AWS), usando AWS CLI . No entanto, às vezes, o bucket do S3 pode estar offline e, por causa disso, o arquivo é ignorado.

Como posso verificar se o arquivo que existe em /data/files/ também está no bucket do S3? e se não copiar o arquivo ausente para o S3?

Eu preferiria fazer isso usando o BASH. Além disso, se eu precisar mudar o AWS CLI para outro, pode ser.

    
por Patrick B. 23.01.2017 / 23:16

3 respostas

0

Consegui fazer isso usando rclone [1] como sugerido pelo @derobert.

O comando é muito simples:

rclone check sourcepath remote:s3bucketname

Exemplo:

Vamos imaginar que você queira verificar se o depósito do S3 (nome do depósito: tmp_data_test_bucket ) tem todos os arquivos que este diretório possui: /tmp/data/

Comando:

rclone check /tmp/data/ remote:tmp_data_test_bucket

[1] link

    
por 24.01.2017 / 20:01
3

Se você usar aws s3 ls no nome real do arquivo. Se existir, o código de saída será 0 e o nome do arquivo será exibido, caso contrário, o código de saída será 0:

aws s3 ls s3://bucket/filname
if [[ $? -ne 0 ]]; then
  echo "File does not exist"
fi
    
por 13.06.2017 / 19:55
1

a primeira resposta está próxima, mas nos casos em que você usa -e no shebang, o script falhará, o que você mais gostaria de não querer. É melhor usar wordcount. Então você pode usar o comando abaixo:

wordcount='aws s3 ls s3://${S3_BUCKET_NAME}/${folder}/|grep $${file}|wc -c'
echo wordcount=${wordcount}
if [[ "${wordcount}" -eq 0 ]]; then
do something
else
do something
fi
    
por 23.08.2018 / 22:33