Sincronizando pastas imutáveis no linux (rsync / unison / alguma outra coisa?)

1

Considere o seguinte layout de diretório:

/foo
  /ABZE1
     a1.txt
     a2.txt
     ...
     a59682.txt
  /BBSDF
     b1.txt
     b2.txt
     ....
     b42333.txt
  ...

foo é a pasta pai, cada um de seus subdiretórios ( ABZE1 , BBSDF , ...) é de fato imutável porque tem um nome exclusivo que implica sua versão . Isso significa que, uma vez criado, esse subdiretório é never modified. Além disso, cada um desses subdiretórios tem muito de arquivos (às vezes > 100K).

Eu preciso fazer uma sincronização bidirecional de foo com foo-remote (uma montagem NFS na mesma máquina).

rsync fará o trabalho, mas tem um desempenho ruim, pois verifica o tamanho / registro de data e hora de todos os arquivos. Se eu conseguisse rsync verificar somente as pastas que funcionariam. Mesmo para unison .

Podemos dizer a rsync para tratar a pasta como a entidade a comparar (e não os arquivos dentro da subpasta)? Existe alguma outra ferramenta que possa conseguir essa sincronização?

    
por Stav 28.07.2016 / 09:46

1 resposta

1

Pelo que sei, o que você está pedindo de rsync não é possível. No entanto, o seguinte comando

diff <(ls) <(ssh me@remote "cd /path/to/remote/backup/directory && ls") 

lista de uma só vez as diferenças entre as duas estruturas de diretório, identificando as diferenças entre elas. Pls notar que isso funciona se você tiver autenticação de configuração por chaves de criptografia no servidor remoto, caso contrário, você será solicitado para uma senha, possivelmente atrapalhando a coisa toda.

Se você quiser, você pode fazer isso pular arquivos (portanto, trabalhar mais rápido, presumivelmente), modificando-o para:

diff <(find . -type d)  <(ssh me@remote "cd /path/to/remote/backup/directory && find . -type d") 

O comando acima consulta apenas diretórios.

Agora você pode analisá-lo por meio de:

 ...(command above)... | grep "<" | awk '{print $2}'

que irá cuspir apenas os nomes dos diretórios que existem no primeiro pc, mas não no segundo (porque usei grep "<" em vez de grep ">" ).

Agora deve ser trivial para rsync apenas os diretórios descobertos dessa maneira.

    
por 28.07.2016 / 10:40