Estou tentando usar "aws s3 sync" na minha instância do EC2. A opção '--exclude' está quebrada?

8

Estou tentando fazer backup da minha instância do EC2 para o S3 usando as ferramentas oficiais da Amazon que vêm pré-instaladas na instância do EC2. Estou tendo dificuldade em obter o comando sync para excluir diretórios da sincronização. A documentação faz parecer fácil usando a opção '--exclude'. No entanto, não consegui fazê-lo funcionar.

Estou executando a versão mais recente disponível no yum:

[root@HOSTNAME ~]# aws --version
aws-cli/1.1.1 Python/2.6.8 Linux/3.4.57-48.42.amzn1.x86_64

Este é o comando com o qual estou tendo problemas:

aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*.git/*'

Quero excluir todas as pastas nomeadas '.git' e todos os arquivos nessas pastas da sincronização.

A julgar pela documentação O padrão que eu dei para '--exclude' deve funcionar. No entanto, o diretório .git inteiro e todos os seus arquivos ainda são sincronizados. Aqui está um exemplo de linha de saída:

upload: ../var/www/site/.git/objects/7b/e3cdf203d34a0d7eff30a96a78d20eacee8d77 to s3://backup-bucket/var/www/site/.git/objects/7b/e3cdf203d34a0d7eff30a96a78d20eacee8d77

Tentei os seguintes comandos, que falharam ao excluir pastas com o nome '.git':

aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude *.git/*
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude */.git/*
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '.git'
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*\.git/*'
aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '.*\.git/.*'

E, talvez o mais perturbador, esse comando não exclui nada da sincronização:

aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*'

De fato, parece que '--exclude' só funciona se o globbing estiver no lado direito de um caminho absoluto. Por exemplo, isso exclui a pasta .git em /var/www/site/.git:

aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '/var/www/site/.git/*'

mas isso não exclui nada:

aws s3 sync /var/www s3://backup-bucket/var/www/ --exclude '*/www/site/.git/*'

Eu tenho muitos sites em / var / www e muitas pastas que desejo excluir da sincronização, como '.git', 'analisado', 'cache' etc. Seria terrível ter que fornecer caminhos absolutos para todos eles .

Espero que haja algo simples que eu esteja fazendo errado aqui. Obrigado a todos por sua ajuda.

user158845
fonte

Respostas:

2

O problema mencionado no github está encerrado e o comando sync permite excluir agora .

Eu tentei e adicionando --exclude ".git/*"obras.

Observe que o final /*é necessário.

Luciano
fonte