número de pastas em um diretório (recursivo)

2

Eu gostaria de imprimir o número de pastas (recursivas, excluindo pastas ocultas) em um determinado diretório CWD / current. Que comando ou série de comandos posso usar para verificar essas informações?

    
por jml 11.11.2014 / 01:46

6 respostas

5

Isso localizará o número de diretórios não ocultos no diretório de trabalho atual:

ls -l | grep "^d" | wc -l

EDITAR:

Para tornar isso recursivo, use a opção -R para ls -l :

ls -lR | grep "^d" | wc -l
    
por 11.11.2014 / 02:36
5

Na terra GNU:

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

em outro lugar

find . -type d ! -name . -printf . -prune | wc -c

No bash:

shopt -s dotglob
count=0
for dir in *; do
  test -d "$dir" || continue
  test . = "$dir" && continue
  test .. = "$dir" && continue
  ((count++))
done
echo $count
    
por 11.11.2014 / 03:12
2

echo $(($(find -type d | wc -l) - 1)) é unidirecional (subtrair 1 do wc -l para remover o diretório atual). Você pode ajustar as opções para encontrar para encontrar coisas diferentes.

echo $(($(find -type d -not -path '*/\.*' | wc -l) - 1)) - para excluir os diretórios ocultos

Como mencionei nos comentários, o coração dessa expressão é realmente find -type d , que encontra todos os diretórios.

Observe que ela também encontra todas as subpastas - você pode controlar a profundidade usando o sinalizador -maxdepth .

    
por 11.11.2014 / 02:13
1

Você tentou o comando tree ?

tree -d /path/to/maindir| awk END{print}
    
por 11.11.2014 / 09:51
1

Em zsh :

(){echo $#} *(N/)

Recursivamente:

(){echo $#} **/*(N/)

Adicione os qualificadores D glob se você também quiser contar diretórios ocultos.

equivalentes POSIX:

ls -p | grep -c /

(adicione a opção -A a ls para os ocultos)

Recursivamente:

LC_ALL=C find .//. ! -name . \( -name '.*' -prune -o -type d -print \) |
  grep -c //

Ou

LC_ALL=C ls -Rqn . | grep -c '^d'

Para incluir os ocultos:

LC_ALL=C find .//. ! -name . -type d | grep -c //

ou:

LC_ALL=C ls -ARqn . | grep -c '^d'
    
por 31.10.2018 / 21:42
0

find . -type d -not -path '.' -printf 0 | wc -c ;

Encontre recursivamente todos os diretórios (-type d) dentro do diretório atual (find.) que não é o diretório (.) e imprima 0 para cada diretório encontrado. Então wc -c conta o número de caracteres (0) da saída do comando anterior.

    
por 31.10.2018 / 16:15