encontre todos os diretórios com menos de x arquivos dentro

4

Suponha que comece em algum diretório no sistema de arquivos. Este diretório base tem muitos subdiretórios (não aninhados!). Cada um dos subdiretórios possui um número arbitrário de arquivos.

Como posso encontrar todos os diretórios com, por exemplo? menos de 3 arquivos dentro usando algum comando shell? O comando find tem algumas boas opções para lidar com o tamanho dos arquivos, mas não consegui encontrar nada sobre a contagem de arquivos.

    
por Stefan Armbruster 02.10.2011 / 17:43

2 respostas

5
$ find . -type d | while read d; do if [ $(ls -1 "$d" | wc -l) -lt 3 ]; then echo $d; fi; done
    
por 02.10.2011 / 18:04
4

Que tal isso:

for i in 'find /etc/ -type d '; do j='ls -1 $i | wc -l' ; if [ $j -le  3 ]; then echo "$i has about $j file(s)"; fi; done

Saída:

[root@kerberos ~]# for i in 'find /etc/ -type d '; do j='ls $i | wc -l' ; if [ $j -le  3 ]; then echo "$i has about $j file(s)"; fi; done
/etc/prelink.conf.d has about 0 file(s)
/etc/kdump-adv-conf has about 2 file(s)
/etc/kdump-adv-conf/kdump_initscripts has about 2 file(s)
/etc/kdump-adv-conf/kdump_sample_manifests has about 1 file(s)
/etc/openldap/slapd.d.backup has about 2 file(s)
/etc/openldap/ssl has about 2 file(s)
/etc/foomatic has about 2 file(s)
/etc/gtk-2.0 has about 2 file(s)
/etc/gtk-2.0/x86_64-redhat-linux-gnu has about 2 file(s)

. . etc

Eu tentei fazer isso dentro do -exec, mas fiquei impaciente e apenas canalizei a saída e a analisei.

EDIT: Tomou nota do uso Quantas de -1 e o incorporou ao meu script, já que você não pode assumir que a saída estará em uma única coluna. No entanto, deixei o operador menor que ou igual no script.

    
por 02.10.2011 / 18:03

Tags