Como faço para contar arquivos em cada sub-diretório no linux do cli

0

Minha contagem total de arquivos era muito alta no servidor onde pago pela hospedagem. Eu precisava encontrar uma maneira de contar o número de arquivos em cada subpasta, para que eu pudesse concentrar minha atenção nas áreas onde há muitos arquivos.

Não consegui encontrar uma única resposta que me mostrasse como fazer o que eu estava tentando fazer, por isso pensei em postar minha pergunta e depois respondê-la para que outras pessoas possam usá-la.

Minha pergunta é:

Como posso percorrer os subdiretórios em meu diretório atual e criar uma lista que mostre o número de arquivos recursivos em cada subdiretório, classificados por contagem de arquivos?

    
por James L. 11.05.2018 / 01:08

2 respostas

1

Eu criei um arquivo na minha pasta pessoal chamado filecnt , que contém as seguintes linhas de código:

for d in *; do
  if [[ -d $d ]]; then
    echo 'find $d -type f | wc -l' $d;
  fi
done | sort -n -k1

Em seguida, alterei as permissões de arquivo para permitir a execução:

chmod 755 ~/filecnt

Agora, em qualquer diretório, posso executar ~/filecnt para ver uma lista de subdiretórios no diretório atual com suas contagens de arquivos recursivas. A lista é classificada por contagem de arquivos (crescente). Por exemplo:

0 access-logs
20 logs
187 etc
232 cache
694 tmp
30007 mail
48325 public_html

Você pode realizar o mesmo simplesmente executando o seguinte comando a partir da CLI:

for d in *; do if [[ -d $d ]]; then echo 'find $d -type f | wc -l' $d; fi done | sort -n -k1

Adicione -r ao comando final sort para ordenar decrescente.

Para produzir uma saída ligeiramente mais agradável, você também pode usar o seguinte código em ~/filecnt em vez do código no topo desta resposta:

echo "File Count    Dir Size  Directory"
echo "----------  ----------  -------------------------"
for d in *; do
  if [[ -d $d ]]; then
    echo 'find $d -type f | wc -l' | awk '{printf "%10s  ", $0;}'
    echo 'du -h --max-depth=0 $d' | cut -d\  -f 1 $1 | awk '{printf "%10s  ", $0;}'
    echo $d
  fi
done | sort -n -k1
echo

A saída é assim:

File Count    Dir Size  Directory
----------  ----------  -------------------------
         0           0  access-logs
        20        8.3M  logs
       187        4.8M  etc
       232        228K  cache
       694         23M  tmp
     30715        6.4G  mail
     48272        2.3G  public_html
    
por 11.05.2018 / 01:17
1
du --inodes ${topdir} 

listará o número de inodes usados por cada diretório (e seus subdiretórios). Você pode identificar facilmente os maiores ofensores:

du --inodes ${topdir} | sort -n

Os diretórios na parte inferior serão os maiores (e o último será o diretório que você passou para du ( ${topdir} nos comandos acima).

#>du --inodes /usr/share/gimp | sort -n
1       /usr/share/gimp/2.0/fonts
2       /usr/share/gimp/2.0/tags
2       /usr/share/gimp/2.0/themes/Small
2       /usr/share/gimp/2.0/tips
3       /usr/share/gimp/2.0/tool-presets/Selection
3       /usr/share/gimp/2.0/ui/plug-ins
4       /usr/share/gimp/2.0/dynamics/FX
4       /usr/share/gimp/2.0/images
4       /usr/share/gimp/2.0/ui
6       /usr/share/gimp/2.0/brushes/Splatters
6       /usr/share/gimp/2.0/scripts/images
7       /usr/share/gimp/2.0/tool-presets/Sketch
8       /usr/share/gimp/2.0/brushes/Legacy
8       /usr/share/gimp/2.0/dynamics/Basic
8       /usr/share/gimp/2.0/gflare
9       /usr/share/gimp/2.0/brushes/Sketch
9       /usr/share/gimp/2.0/gradients/gimp-obsolete-files
9       /usr/share/gimp/2.0/tool-presets/FX
10      /usr/share/gimp/2.0/gimpressionist/Paper
11      /usr/share/gimp/2.0/brushes/Basic
11      /usr/share/gimp/2.0/gfig
12      /usr/share/gimp/2.0/brushes/Media
13      /usr/share/gimp/2.0/brushes/Texture
17      /usr/share/gimp/2.0/tool-presets/Paint
21      /usr/share/gimp/2.0/dynamics
26      /usr/share/gimp/2.0/gimpressionist/Presets
32      /usr/share/gimp/2.0/menus
34      /usr/share/gimp/2.0/fractalexplorer
37      /usr/share/gimp/2.0/tool-presets
41      /usr/share/gimp/2.0/brushes/gimp-obsolete-files
41      /usr/share/gimp/2.0/palettes
59      /usr/share/gimp/2.0/patterns
61      /usr/share/gimp/2.0/gimpressionist/Brushes
65      /usr/share/gimp/2.0/themes/Default/images/preferences
70      /usr/share/gimp/2.0/themes/Default/images
72      /usr/share/gimp/2.0/themes/Default
75      /usr/share/gimp/2.0/themes
80      /usr/share/gimp/2.0/gradients
98      /usr/share/gimp/2.0/gimpressionist
101     /usr/share/gimp/2.0/brushes
270     /usr/share/gimp/2.0/scripts
881     /usr/share/gimp/2.0
882     /usr/share/gimp
    
por 11.05.2018 / 14:23