Como excluir arquivos no rsync?

12

Estou usando o servidor ubuntu 12.04, agora 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, desejo fazer backup de todos os arquivos da pasta $ HOME / Documents para a pasta $ HOME / Backups / TEST , mas excluir os arquivos da pasta another e temp . Mas eu falhei, o rsync ainda copiava os arquivos nas duas pastas excluídas:

ls $HOME/Backups/TEST/another
test

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

Searene
fonte

Respostas:

11

Existem vários problemas com o comando rsync (consulte também a página de manual do rsync para obter uma explicação detalhada das regras de filtro).

  • precisamos de um --excludecomando para cada padrão.
  • os caminhos fornecidos precisam ser relativos ao caminho de origem (sem caminhos absolutos).
  • as opções precisam ser fornecidas antes de indicar a origem e o 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, ele se refere a um diretório. Se você omitir os dois, 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.

Takkat
fonte
6
Isso não é inteiramente correto. Não tenho certeza de como ele funciona, mas, a partir da experimentação, --exclude=/fooexcluirá o diretório foodiretamente na fonte, mas --exclude=fooexcluirá todos os diretórios denominados foo, mesmo em subdiretórios.
Sparhawk
10

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

Na página do manual:

-F: A opção -F é um atalho para [...] esta regra:

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

Isso instrui o rsync a procurar por arquivos .rsync-filter por diretório que foram espalhados pela hierarquia e usar suas 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/
mivk
fonte