rsync: como excluir o diretório superior

14

Portanto, tenho um problema aparentemente simples, mas até agora não encontrei uma solução: quero excluir o diretório superior de um rsync, enquanto ainda sincronizo todos os seus filhos. O problema específico é que não tenho permissão para modificar os horários do diretório superior, mas quero que todos os filhos tenham horários sincronizados corretamente.

O comando rsync que estou usando é o seguinte:

rsync --exclude ./ -rlptDu ./ server.example.com:/usr/local/directory/

e server.example.com:/usr/local/directory/fica assim:

drwxrws---  5 root   staff 24576 Jul  9 15:00 .

(meu usuário local é membro staff)

Quando executo o rsync, recebo o seguinte erro:

rsync: failed to set times on "/usr/local/directory/.": Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]
make: *** [pub_to_mel_internal] Error 23

Esta é a versão 3.0.9 na máquina local e 3.0.7 no controle remoto, ambas as máquinas executando o Debian.

Steve Pomeroy
fonte
Você está familiarizado com a sintaxe neste exemplo: wirespeed.xs4all.nl/mediawiki/index.php/… Permite incluir arquivos / diretórios específicos de um diretório excluído. Você pode precisar usar um arquivo de exclusão.
21712 jippie
Sim. O problema é que não consigo convencê-lo a excluir o diretório de nível superior (especificamente). Eu não tive problemas com a mistura de inclusão / exclusão no passado, apenas parece que o nível superior é um caso especial.
9788 Steve Pomeroy

Respostas:

8

Eu acho que as regras de filtro do rsync não podem corresponder ao diretório de nível superior, por isso é sempre sincronizado. Uma solução alternativa é sincronizar todos os arquivos dentro deste diretório em vez do próprio diretório.

rsync -rlptDu -- * server.example.com:/usr/local/directory/

Adicione .[!.]*depois *se você tiver arquivos de pontos no diretório superior e ..?*se tiver nomes de arquivos começando com dois pontos.

Gilles 'SO- parar de ser mau'
fonte
2
Incrível, obrigado! Isso funciona. A única desvantagem dessa técnica é que ela requer que o shell selecione todos os arquivos. Se você tiver toneladas de arquivos no diretório (o que eu não tenho no meu caso), ele pode sufocar. Provavelmente isso poderia ser corrigido usando xargs (embora não com as opções --delete).
9788 Steve Pomeroy
Um problema que tive com o uso *foi o de --deletenão excluir nenhum arquivo, pois ele não fazia parte da pesquisa.
thomasa88
@ thomasa88 Por favor, veja esta resposta .
Kamil Maciorowski