Você pode usar find
com um sinalizador de carimbo de data / hora para que ele pegue todos os arquivos desde a última execução, independentemente de quanto tempo atrás foi. Sinta-se à vontade para substituir a definição de $trigger
por algo mais apropriado.
trigger=/tmp/trigger
touch "$trigger.new"
test ! -f "$trigger" && touch "$trigger"
find /a/b/c -newer "$trigger" -type f -exec cp -f {} /x/y/z +
mv -f "$trigger.new" "$trigger"
Isso ainda falhará em situações em que o mtime é redefinido após o arquivo ter sido completamente gravado.
Ele também falhará se o arquivo de origem estiver sendo gravado quando esse código for executado. Vale a pena se proteger contra esse cenário, a menos que você possa garantir que seus arquivos de origem apareçam atomicamente. Uma maneira de lidar com isso é que seus arquivos sejam gravados com um sufixo .tmp
(ou .part
) e renomeados pelo remetente apenas quando estiverem completos. O find
neste script acionador aqui seria modificado para excluir arquivos cujos nomes terminam com .tmp
(ou .part
).
Você também pode usar rsync
, mas esteja ciente de que os caminhos de diretório na origem seriam copiados para o destino, o que pode não ser o que você deseja. Substitua o snippet acima por esta única linha:
rsync -a /a/b/c/ /x/y/z/