Job para manter uma contagem de arquivos XML

5

Meu amigo trabalha em uma empresa de TI, onde é necessário manter uma contagem de arquivos XML dentro de um diretório (incluindo subdiretórios).

No entanto, a contagem usando ls -LR | grep .xml ou similar leva muito tempo, já que a contagem de arquivos está na casa dos milhões.

Eu estava pensando o que pode ser uma abordagem melhor?

Algum tipo de processo em segundo plano pode cuidar disso, de modo que, sempre que houver um novo arquivo criado ou alteração de horário de modificação, ele afete o contador (nº de arquivos)?

    
por Novice User 12.05.2012 / 10:43

2 respostas

6

O daemon que você descreveu pode usar inotify .

Mas talvez usar find e wc -l já seja rápido o suficiente?

Eu executei apenas um teste rápido, mas há uma diferença significativa entre time ls -lR /mm/|grep -c jpg ( real 0m2.168s ) e time find /mm -type f -name \*jpg|wc -l ( real 0m0.397s ) no meu sistema. Ambos retornam aproximadamente 42.000 arquivos, portanto a diferença em diretórios maiores provavelmente seria maior.

(Eu corri os dois comandos várias vezes para excluir os efeitos de cache de disco).

    
por 12.05.2012 / 12:18
3

O script a seguir assistirá a um diretório indefinidamente e imprimirá o número de arquivos '* .xml' toda vez que o conteúdo do diretório for alterado.

DIR="a_path_to_directory_to_watch"
(echo; inotifywait -m -r -e create -e delete "$DIR" 2> /dev/null) |
    while read; do
        find "$DIR" -name '*.xml' -printf . | wc -c
    done
    
por 12.05.2012 / 13:58

Tags