Como executo um script de shell apenas os arquivos são modificados em uma pasta?

1

Eu preciso replicar uma pasta em um link muito lento para vários destinos.

Atualmente, crio um arquivo de texto com a localização.

find "$sourcedir" -exec ls -la {} \; > "$statefile"

Eu, então, comparo com um arquivo anterior criado da mesma maneira para determinar se o script deve sair ou executar alguns rsyncs. No final, o novo statefile se torna o antigo statefile para a próxima vez que o script for executado.

if ! diff "$statefile" "$statefile".old 

Existe uma maneira melhor de minimizar o uso de recursos na origem? (Compatível com o bash no Debian.)

Devo apenas executar o primeiro rsynd e depois das alterações, fazer o resto? Como posso saber se o rsync realmente modificou algum arquivo após o primeiro rsync?

    
por user122992 18.03.2013 / 06:44

1 resposta

1

Você quer reduzir os recursos usados por find, ls e diff? Deve haver uma quantidade enorme de arquivos para que isso se torne relevante, eu acho ...

Você pode salvar muitas chamadas ls usando -exec ... + em vez de -exec ... ; . E você pode considerar livrar-se de ls, pois nada que encontrar não pode fazer sozinho. Você pode gerar o arquivo com os valores printf do find, criando mais ou menos a mesma saída. Mas: Nem o ls nem o find detectam certas mudanças na ACL e nos atributos estendidos.

Uma abordagem completamente diferente: FAM (File Alteration Monitor). Você deixa o kernel te dizer (por exemplo, fileschanged ) o que (possivelmente) mudou.

Mais uma dica: algo como o rdiff-backup deve precisar de menos largura de banda que o rsync porque

  1. as verificações são feitas localmente
  2. as verificações são feitas apenas uma vez e não novamente para cada destino
por 18.03.2013 / 07:34