GNU encontra arquivos .extension e -exec, enquanto novos arquivos .extension estão sendo feitos

0

Aqui está um problema, alguém pode explicar ou fornecer algumas referências. Eu tenho tentado ler desde uma hora, mas não consigo encontrar a resposta.

Suponha que eu tenha process1 indo em um pool 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 process1 continua neste, digamos, diretório1. process1, em seguida, passa para directory2 e assim por diante.

Agora, quero fazer algo com csvs nos diretórios com os quais process1 terminou. Idealmente, devo verificar quais diretórios foram finalizados e executar o process2 neles. Mas na minha infinita sabedoria, faço isso:

localize diretórios * -type f -name '* .csv' -exec process2

Minha suposição era que o find primeiro encontraria todos os csvs existentes até o ponto de invocação de find e então -exec process2 naqueles apenas, ignorando quaisquer csvs que tenham sido feitos após a invocação do find.

Parece que eu estava errado (ainda não tenho certeza). Alguém pode explicar, por favor?

Obrigado.

    
por ASB 02.01.2013 / 18:35

1 resposta

2

A maneira como find trabalha com -exec é que o processo exec é chamado quando cada arquivo é encontrado. Se você quiser trabalhar a partir de um instantâneo, provavelmente é 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;

Mais uma vez, você ainda não sabe quais estão sendo gravados, então você tem que resolver isso separadamente.

    
por 02.01.2013 / 18:41