Como incluir arquivos excluídos em um rsync

16

Estou tentando configurar um rsync que exclui todos os .*arquivos, exceto, .htaccessmas infelizmente isso não funciona:

rsync -avP --exclude=".*" --include="./.htaccess" ./. user@server:/dir

É possível excluir de alguma forma regras gerais de exclusão?

Rico
fonte

Respostas:

24

A primeira regra de correspondência se aplica, portanto inclua .htaccessantes de excluir .*.

rsync -avP --include=".htaccess" --exclude=".*" . user@server:/dir

Isso copia .htaccessem todos os níveis. Não sei com o que você pretendia ./.htaccess; se você quiser corresponder a um arquivo apenas na raiz da cópia, inicie o padrão com a /. Se você deseja apenas a raiz .htaccess, não pode usar apenas --include='/.htaccess' --exclude='.*', porque a regra sem raiz realmente tem precedência aqui, você precisa fazer algo mais complicado:

rsync -avP --exclude='/*/**/.htaccess' --include='.htaccess' --exclude=".*" . user@server:/dir

Leitura adicional: princípios básicos para filtros rsync .

Gilles 'SO- parar de ser mau'
fonte
@ fred.bear: Esse foi um erro de digitação genuíno e desagradável. Obrigado por detectá-lo!
Gilles 'SO- stop be evil' ''
Obrigado, eu tentei colocar o --includeprimeiro, mas o "./" na frente do "./.htaccess" era o que o estava matando.
Rich
1
@ Rich note que, se houver diretórios ocultos que contenham um .htaccessarquivo, você deverá --include='.*/'(acho) antes da final --exclude, veja também aqui
Tobias Kienzler 19/12/12