Como excluir arquivos no rsync?

12

Estou usando o servidor Ubuntu 12.04, agora eu quero fazer backup de alguns arquivos usando o rsync, aqui está uma tentativa:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

Como você pode ver, eu quero fazer backup de todos os arquivos na pasta $ HOME / Documents para a pasta $ HOME / Backups / TEST , mas exclua arquivos na pasta outra e temp . Mas eu falhei, o rsync ainda copiou os arquivos em ambas as pastas excluídas:

ls $HOME/Backups/TEST/another
test

teste é um arquivo na pasta outro , e também é copiado embora eu exclua o arquivo no rsync, por quê? Como deixar esses arquivos serem realmente excluídos?

    
por Searene 06.05.2013 / 08:25

2 respostas

11

Existem vários problemas com o seu comando rsync (veja também página de manual do rsync para obter explicações detalhadas sobre o filtro regras).

  • precisamos de um comando --exclude para cada padrão fornecido.
  • os caminhos dados precisam ser relativos ao caminho de origem (sem caminhos absolutos).
  • opções precisam ser dadas antes de declarar origem e destino.

Para o seu exemplo, a seguinte sintaxe funcionará:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Observe que, se um padrão de exclusão terminar com / , ele se referirá a um diretório. Se você omiti-lo, os arquivos e diretórios com esse nome serão excluídos. Substitua-o por um curinga * para excluir todos os arquivos ou diretórios com essa sequência em seus nomes.

    
por Takkat 06.05.2013 / 08:55
8

Você pode achar mais fácil adicionar .rsync-filter arquivos em seus diretórios de origem e usar a opção -F .

Da página do manual:

  

-F: A opção -F é uma abreviação [...] para esta regra:

 --filter='dir-merge /.rsync-filter'
     

Isso diz ao rsync para procurar arquivos .rsync-filter por diretório.   que foram espalhados pela hierarquia e usam seus   regras para filtrar os arquivos na transferência.

Por exemplo: em $ HOME / Documents / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

Em vez de - , você também pode escrever a palavra inteira exclude .

Agora você pode

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
    
por mivk 25.04.2014 / 15:16