[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] master & slave...
From: |
Fábio Olivé Leite |
Subject: |
Re: [shell-script] master & slave... |
Date: |
Fri, 2 May 2003 00:11:35 -0300 |
User-agent: |
KMail/1.4.3 |
Olá!
Em Qui 01 Mai 2003 20:07, Gilmar Pupo escreveu:
> E como mandar apenas os recentes?
Hmmm... um uso criativo de touch e find vão te socorrer. Ó só:
[inicialmente transfira tudo, pois tudo é "recente"]
$ touch timestamp
$ echo uga > uga
$ find -newer timestamp -type f
./uga
[transfira só aquilo retornado pelo find, depois atualize o timestamp]
$ touch timestamp
$ find -newer timestamp -type f
[não retorna nada, pois nada foi atualizado]
$ echo eca > eca
$ find -newer timestamp -type f
./eca
O "find -newer arquivo" te permite achar arquivos criados/modificados
mais recentemente que um outro arquivo. Então faça touch de um
arquivo "timestamp" logo depois de cada transferência, pois assim na
próxima transferirás somente o que foi atualizado.
Na verdade, para ficar bala, faça assim: a cada momento de transferir,
tu fazes "touch newtimestamp", aí usas o "find -newer timestamp" para
transferir o que foi atualizado, e então moves o newtimestamp por
sobre o timestamp antigo. Isso fará com que arquivos criados durante
a transferência mas que porventura sejam esquecidos pelo find
(criados depois que ele varrer um diretório, por exemplo) sejam
garantidamente pegos no próximo, pois o newtimestamp foi gerado logo
antes de começar a varredura.
Na minha primeira sugestão tem uma condição de corrida, pois se um
arquivo for criado logo após o find ter varrido seu diretório, ou
logo após o término do find, porém ainda antes do "touch timestamp"
rodar, ele será mais velho que o timestamp, porém não terá sido
transferido. Usando dois timestamps isso não acontece.
Espero que ajude. >:)
--
OpenBSD: Unix casca grossa -=- KNOW THYSHELL (that is, man ksh)