Evitar que o rsync exclua diretórios excluídos

2

Estou usando o rsync através do synchronize-module da Ansible com a seguinte definição de tarefa:

synchronize: src='{{ local_app_path }}/.' dest='{{ remote_app_path }}/' perms=no owner=yes rsync_opts=--delete-after

A execução desta tarefa gera o seguinte comando:

rsync --delay-updates -FF --compress --archive --no-perms --rsh 'ssh  -S none -o StrictHostKeyChecking=no' --rsync-path="sudo rsync" --delete-after --out-format='<<CHANGED>>%i %n%L' "../src/." "[email protected]:/var/www/app/"

Meu layout de diretório é assim:

src/
    # ...
    app/
    test/
    node_modules/
    package.json
provisioning/
    # ...
    playbook.yml
.rsync-filter

Este é o meu filtro .rsync:

exclude /src/.env
exclude /src/node_modules

Agora estou esperando executar minha tarefa de sincronização e ter a estrutura de diretório resultante no servidor com esta aparência (observe a pasta node_modules ausente):

app/
test/
package.json

Isso funciona. No entanto, depois de criar uma pasta node_modules no servidor ...

app/
test/
node_modules/
package.json

... e execute a sincronização novamente, a pasta node_modules será excluída do servidor novamente (mesmo que eu tenha excluído no meu filtro .rsync):

app/
test/
package.json

Espero que a node_modules -folder seja mantida no servidor, porque eu a listei em .rsync-filter e não estou usando a opção --delete-excluded .

Como posso impedir que meus arquivos / diretórios excluídos sejam excluídos com o rsync?

Muito obrigado pela sua ajuda! :)

    
por Macks 08.01.2015 / 19:47

1 resposta

0

É o -FF que está causando o seu problema. Isso impede que o arquivo -rsync-filter seja copiado e como a página man do rsync diz ...

MERGE-FILE FILTER RULES
       ...
       These per-directory rule files must be created on the sending side because it is the
       sending side that is being scanned for the available files to transfer. These rule files may also
       need to be transferred to the receiving side if you want them to affect what files don’t get deleted
       (see PER-DIRECTORY RULES AND DELETE below).

O bit importante é a última sentença nessa seção citada. Alterar -FF para -F fornece o comportamento desejado.

    
por 08.01.2015 / 23:28