rsync --delete-excluded com --prune-empty-dirs, mas apenas remove diretórios excluídos

4

Eu tenho usado o rsync para clonar meu perfil de usuário do Windows para um servidor remoto todas as noites. Eu estou usando um --filter='merge <file>' arg para carregar um arquivo cheio de regras de inclusão / exclusão, que eu uso para evitar a transferência de caches do navegador e outras coisas que eu sei que é inútil. Também estou usando o --prune-empty-dirs para evitar a criação de vários diretórios vazios desnecessários.

Meu script também usa a opção --delete-excluded , porque assim, se eu identificar mais coisas que desejo excluir, basta adicioná-lo ao arquivo de filtro e ele será automaticamente ativado na próxima vez em que a tarefa for executada.

No entanto, isso tem o efeito colateral de excluir todos diretórios vazios. Estou preocupado que isso vá quebrar alguma coisa no caso de um aplicativo mal escrito que não verifica a existência de diretório antes de gravar dados.

Existe uma maneira de "remover" somente os diretórios que estão vazios como resultado de exclusões, e não os diretórios que estão realmente vazios no lado da fonte? (Eu gostaria de fazer isso com uma regra simples, em vez de ter que fornecer explicitamente qualquer dirs pelo nome, devido ao número de diretórios envolvidos.)

As únicas soluções que imediatamente vêm à mente são:

  1. pare de usar --prune-empty-dirs e viva com os diretórios extras.
  2. pare de usar --delete-excluded no trabalho noturno e execute manualmente --delete-excluded (sem --prune ) sempre que eu alterar o arquivo de filtro, o que eliminará as novas exclusões e recriará os dirs "genuinamente" vazios. Nenhum deles é ideal.
por meeotch 23.11.2016 / 08:36

1 resposta

1

Você pode querer adicionar os diretórios que estão vazios no lado do destino devido a exclusões para um filtro de exclusão. Se você puder excluir o diretório inteiro, suas regras de filtro serão mais simples e --prune-empty-dirs poderá nem ser necessário. Como alternativa, você pode adicionar regras de proteção à sua lista de filtros para os diretórios que estão genuinamente vazios no lado da origem. Na página do manual do rsync:

You can prevent the pruning of certain empty directories from the file-list by using a global "protect" filter. For instance, this option would ensure that the directory "emptydir" was kept in the file-list:

--filter ’protect emptydir/’

O nome abreviado para proteção é apenas um% maiP, portanto, por exemplo, a regra pode parecer

P .stfolder

para proteger uma coisa do syncthing .stfolder de ser removida.

A menos que as pastas que você deseja excluir ou proteger possam ser identificadas usando um padrão, você precisará ser bastante explícito com suas regras, mas alguma combinação dessas duas abordagens deve ser capaz de alcançar o que você deseja. Na minha experiência, as regras de rsync nunca são concluídas, mas são gradualmente refinadas com o passar dos anos.

    
por 06.05.2018 / 00:53

Tags