Converter rsync excluir padrões para lista explícita de arquivos

4

Estou tentando descobrir se existem maneiras de converter uma longa lista de rsync padrões de exclusão, que estou mantendo com o propósito de fazer backups sensatos, para uma lista explícita de nomes de arquivos e diretórios.

O aplicativo é que estou tentando usar a mesma lista (sempre que eu atualizo adicionando ou removendo um padrão) para um aplicativo diferente ( mksquashfs ). Ambas as ferramentas permitem que listas de arquivos explícitas com uma entrada por linha sejam especificadas como lista de exclusão, mas a sintaxe para os padrões difere em detalhes.

Você pode assumir que a lista a ser convertida consiste em todos os padrões de tipos, possivelmente incluindo curingas, permitidos por rsync .

Duas abordagens são concebíveis:

  1. Descubra o que o rsync usa sob o gancho (não parece ser um simples shell globbing nem find )
  2. Use rsync para produzir a lista fazendo uma transferência simulada --dry-run com saída detalhada (aqui não sei como fazer com que ela imprima os nomes dos arquivos excluídos)
por highsciguy 31.03.2018 / 19:01

1 resposta

0

Algo parecido com isto: onde "${other_opts[@]}" indica seus argumentos normais de rsync.

rsync --dry-run --debug=FILTER  "${other_opts[@]}" /proc/$$/no-such-dir/

Deve imprimir todos os arquivos excluídos.

[sender] hiding file .bash_history-27611.tmp because of pattern *.tmp
[sender] hiding file .bash_history-21217.tmp because of pattern *.tmp
[sender] hiding file .bash_history-29735.tmp because of pattern *.tmp
[sender] hiding file .bash_history-20437.tmp because of pattern *.tmp

você pode dividir usando sed.

sed '/^\[sender\] hiding file .* because of / {
  s/^\[sender\] hiding file \(.*\) because of .*//
  p
  }
d '

mas isso pode ser interrompido se você encontrar nomes de arquivos que contenham caracteres de controle.

    
por 01.04.2018 / 10:18