Dentro do script de shell ( test.sh
) Eu tenho inotifywait monitorando recursivamente algum direcotry - "somedir":
#!/bin/sh
inotifywait -r -m -e close_write "somedir" | while read f; do echo "$f hi"; done
Quando eu executo isso no terminal, recebo a seguinte mensagem:
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
O que eu preciso é tocar em todos os arquivos em "somedir" DEPOIS os relógios foram estabelecidos. Para isso eu uso:
find "somedir" -type f -exec touch {}
A razão é que ao iniciar o inotifywait após o travamento, todos os arquivos que chegam durante o tempo nunca serão coletados. Então, o problema e a pergunta é, como ou quando devo executar o find + touch
?
Até agora tentei dormir alguns segundos depois de chamar test.sh
, mas isso não funciona a longo prazo quando o número de subdiretores em "somedir" crescer.
Eu tentei verificar se o processo está em execução e durmo até que apareça, mas parece que o processo aparece antes de todos os relógios serem estabelecidos.
Eu tentei alterar test.sh
:
#!/bin/sh
inotifywait -r -m -e close_write "somedir" && find "somedir" -type f -exec touch {} |
while read f; do echo "$f hi"; done
Mas nenhum arquivo é tocado. Então eu realmente preciso de uma ajuda ...
Informações adicionais são de que test.sh
está sendo executado em segundo plano: nohup test.sh &
Alguma ideia? Obrigado
FYI: Baseado no conselho do @xae, eu uso assim:
nohup test.sh > /my.log 2>&1 &
while :; do (cat /my.log | grep "Watches established" > /dev/null) && break; done;
find "somedir" -type f -exec touch {} \+