Lista apenas a contagem de todos os arquivos / diretórios para a árvore de diretórios do diretório atual

0

Eu quero listar o número de diretórios em cada árvore de subdiretórios do diretório atual. Como há muitos diretórios, não posso entrar em diretórios individuais e verificar. Eu gostaria de produzir um relatório como o mostrado na figura a seguir:

O problema é: meu servidor está dando algum aviso de que o limite máximo de criação de diretórios é atingido. Então eu queria saber qual diretório no meu diretório pai tem o máximo de subdiretórios (excluindo arquivos),

    
por MostWanted 17.07.2015 / 12:16

5 respostas

1

Você pode encontrar os diretórios de primeiro nível e, em seguida, usar um segundo encontro para contar o número de arquivos e diretórios no diretório de nível superior:

$ for dir in $(find . -maxdepth 1 ! -path . -type d | sort); \
      do echo -n "$dir " && find $dir ! -path . | wc -l ; done
./adir 1151
./anotherdir 140
./623de41e44 280
./examples 154
...
    
por 17.07.2015 / 12:43
1

Será que algo assim se adequa à sua necessidade:

O caminho /boot é usado para demonstração de amostra. Mude para o diretório que você precisa.

for DIR in $(find /boot/* -maxdepth 1 -type d)
do
    printf "%40s: %10d\n" "${DIR}" $(find ${DIR}|wc -l)
done

Saída:

                          /boot/grub:        282
                    /boot/grub/fonts:          2
                  /boot/grub/i386-pc:        272
                   /boot/grub/locale:          4
                    /boot/lost+found:          1
    
por 17.07.2015 / 12:58
1

Solução ksh93 pura:

FIGNORE='@(.|..)'
for dir in */; do a=( "$dir"/**/* ); printf "%s\t%s\n" "$dir:" "${#a[*]}"; done

Resultado de /usr/src :

linux-3.17.7-gentoo/:   561
linux-3.5.7-gentoo/:    517
linux-3.7.10-gentoo/:   505
linux-3.7.9-gentoo/:    513
linux-3.8.13-gentoo/:   551
linux-4.0.5-gentoo/:    1849
    
por 17.07.2015 / 13:53
0

tente

  find * -print | awk -F/ '{c[$1]++;} END { for (c2 in c) printf "-%s -- %d\n",c2,c[c2] ;} '

onde

  • encontre no diretório acima daqueles que você deseja resumir
  • o awk contará o diretório e o arquivo de nível superior e resumirá no final.
por 17.07.2015 / 14:02
0

O pequeno loop a seguir listará uma contagem de todos os arquivos (exceto links simbólicos) nos diretórios filhos de . que existem no mesmo sistema de arquivos que o diretório filho.

for d in ./* ./.[!.]* ./..?*
do  ! [ -h "$d" ]  &&
      cd "$d" 2>&3 || continue
      printf "%s:\t" "$d"
      find .//. -xdev -depth ! -type l |
      grep -c '^\.//\.'
      cd ..
done  3>/dev/null
    
por 17.07.2015 / 20:13