Aqui está um problema, alguém pode explicar ou fornecer algumas referências. Estou tentando ler há uma hora, mas não consigo encontrar a resposta.
Suponha que eu tenha o processo1 em um conjunto de diretórios. process1 escolhe um diretório e cria, digamos, arquivos .csv dentro dele. Os arquivos .csv estão sendo anexados e, portanto, incompletos enquanto o processo1 continua neste, digamos, diretório1. process1 então passa para o diretório2 e assim por diante.
Agora, quero fazer algo com csvs nos diretórios com os quais o process1 foi finalizado. Idealmente, eu deveria verificar quais diretórios foram concluídos e executar o process2 neles. Mas na minha infinita sabedoria, faço o seguinte:
encontre diretórios* -type f -name '*.csv' -exec process2
Minha suposição era que find encontrará primeiro todos os csvs existentes até o ponto de invocação de find e então -exec process2 apenas naqueles, ignorando quaisquer csvs que tenham sido feitos após a invocação de find.
Parece que eu estava errado (ainda não tenho certeza). Alguém pode explicar, por favor?
Obrigado.
Responder1
A maneira como find
funciona -exec é que o processo exec é chamado à medida que cada arquivo é encontrado. Se você quiser trabalhar a partir de um instantâneo, provavelmente será melhor fazer algo assim:
find directories* -type f -name '*.csv' > /tmp/filelist
cat /tmp/filelist | while read file; do
process2 $file # I'm assuming you want to pass the filename somehow...
done;
Novamente, você ainda não tem ideia de quais estão realmente sendo gravados, então você terá que resolver isso separadamente.