Como contar subdiretórios em um diretório no UNIX?

1

Eu tenho que contar o número total de diretórios que estão no diretório fornecido (note que estes são subdiretórios).

Eu sei contar arquivos, mas estou tendo problemas para contar os diretórios do meu script.

    
por Yasuo 21.04.2015 / 17:19

3 respostas

4

Se você colocar um / no final de um padrão curinga, o padrão corresponderá apenas aos diretórios e links simbólicos para os diretórios. O snippet a seguir, portanto, conta diretórios e links simbólicos no diretório atual.

set -- */ .*/
if ! [ -e "$1" ]; then shift; fi # handle the case when */ matches nothing
echo $(($# - 2)) # -2 for . and ..

No bash, você pode simplificar isso para

shopt -s dotglob nullglob
dirs=(*/)
echo ${#dirs[@]}

Se você não quiser incluir diretórios, use find . Se nenhum dos diretórios tiver um nome que contenha uma nova linha, você poderá contar as linhas:

find . -name . -o -type d -print -prune | wc -l

Para ser totalmente robusto, conte as barras.

find . -name . -o -type d -print -prune | tr -dc / | wc -c
    
por 22.04.2015 / 02:51
2

Em uma variação levemente robusta do comentário de @ rahul:

find . -type d -mindepth 1 -printf '1'  | wc -c

imprime "1" para cada diretório no atual que não é o atual ( -mindepth 1 ) e, em seguida, contamos os 1s. Isso irá lidar com nomes de diretório que contêm novas linhas.

    
por 21.04.2015 / 17:53
0

Contando diretórios em (apenas) o diretório atual:

find . -mindepth 1 -maxdepth 1 -type d | wc -l

Contando diretórios no diretório atual e em todos os subdiretórios contidos nele:

find . -mindepth 1 -type d | wc -l
    
por 21.04.2015 / 18:00

Tags