Questão GNU encontra arquivos de extensão e -exec, enquanto novos arquivos de extensão estão sendo feitos


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 o diretório2 e assim por diante.

Agora, quero fazer algo com csvs em 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 * -tipo f -name '* .csv' -exec process2

Minha suposição era que 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 de find.

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

Obrigado.


0


origem


Você não poderia ter process1 executar process2 depois de terminar com o arquivo? - Rob
Bem, sim. Você está certo. Não é um problema, pois não há uma solução. Isso é um problema, pois fiz algo tão estúpido e agora estou apenas tentando entender as repercussões disso. Obrigado mesmo assim. - ASB


Respostas:


O caminho find funciona com -exec é que o processo exec é chamado à medida que 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;

Novamente, você ainda não tem ideia de quais estão sendo gravadas, então você tem que resolver isso separadamente.


2