shell-script-pt
[Top][All Lists]
Advanced

[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)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]