O tamanho do diretório (como visto em ls -ld /var/lib/php/sessions
) pode dar uma indicação. Se é pequeno, não há muitos arquivos. Se for grande, pode haver muitas entradas, ou pode ter havido muitas no passado.
Listar o conteúdo, contanto que você não stat
arquivos individuais, não demore muito mais do que ler um arquivo do mesmo tamanho.
O que pode acontecer é que você tem um alias para ls
que usa ls -F
ou ls --color
. Essas opções fazem com que uma chamada de sistema lstat
seja executada em todos os arquivos, por exemplo, se forem um arquivo ou diretório.
Você também desejará certificar-se de listar os arquivos de ponto e deixar a lista de arquivos sem classificação. Para isso, execute:
command ls -f /var/lib/php/sessions | wc -l
Desde que não haja muitos nomes de arquivos com caracteres de nova linha, isso deve lhe dar uma boa estimativa.
$ ls -lhd 1
drwxr-xr-x 2 chazelas chazelas 69M Aug 15 20:02 1/
$ time ls -f 1 | wc -l
3218992
ls -f 1 0.68s user 1.20s system 99% cpu 1.881 total
wc -l 0.00s user 0.18s system 9% cpu 1.880 total
$ time ls -F 1 | wc -l
<still running...>
Você também pode deduzir o número de arquivos, subtraindo o número de arquivos exclusivos em outro lugar no sistema de arquivos do número de inodes usados na saída de df -i
.
Por exemplo, se o sistema de arquivos estiver montado em /var
, com GNU find
:
find /var -xdev -path /var/lib/php/sessions -prune -o \
-printf '%i\n' | sort -u | wc -l
Para encontrar o número de arquivos que não estão em / var / lib / php / sessions. Se você subtrair esse valor ao campo IUsed
na saída de df -i /var
, obterá uma aproximação (porque alguns inodes especiais não estão vinculados a nenhum diretório em um sistema de arquivos ext típico) do número de arquivos vinculados a /var/lib/php/sessions
que não estão ligados em outro lugar (note que / var / lib / php / sessions poderia muito bem conter um bilhão de entradas para o mesmo arquivo (na verdade, o número máximo de links em um arquivo será muito menor do que na maioria dos sistemas de arquivos), de modo que o método não é à prova de erros.
Observe que, se a leitura do conteúdo do diretório deve ser relativamente rápida, a remoção de arquivos pode ser dolorosamente lenta.
rm -r
, ao remover arquivos, primeiro lista o conteúdo do diretório e, em seguida, chama unlink()
para cada arquivo. E para cada arquivo, o sistema precisa procurar o arquivo nesse diretório enorme, o que, se não for fragmentado, pode ser muito caro.