Como contar o número de pastas em um diretório específico. Estou usando o seguinte comando, mas sempre fornece um extra.
find /directory/ -maxdepth 1 -type d -print| wc -l
Por exemplo, se eu tiver 3 pastas, este comando fornece 4. Se ele contém 5 pastas, o comando fornece 6. Por que isso?
Respostas:
find
também está imprimindo o próprio diretório:Em vez disso, você pode testar os filhos do diretório e não descer até eles:
Você também pode usar
ls
:fonte
$ ls -l .vim
com o PHP? Ou como obter apenas o total, sem a lista. Quer dizer, neste caso, obter apenas52
?(ls).Count
ls -l | grep -c ^d
é muito simples e funciona. @Pathros provavelmente é uma maneira melhor em PHP, mas no pior caso em PHP você sempre pode usar a função shell_exec () para executar a linha de comando e retornar os resultados para uma string. ou seja$dirCount = shell_exec('ls -l | grep -c ^d');
Obtenha uma contagem apenas dos diretórios no diretório atual
echo */ | wc
você vai sair e colocar como
1 309 4594
2nd digit
representa não. de diretórios.ou
tree -L 1 | tail -1
fonte
zsh: no matches found: */
precisa de nullglobecho
. tipowhich echo
echo */ | wc -w
Pois encontrar
-mindepth
significa número total não permitido nos diretórios-maxdepth
significa número total de recusas em diretórios-type d
significa diretórioE para
wc -l
meios conta as linhas da entradafonte
find . -mindepth 1 -maxdepth 1 -type d | wc -l
fornecerá muitos espaços entre o número, por exemplo: `2` você pode evitar usando este:dir_count=`find . -maxdepth 1 -type d | wc -l | xargs`; echo $dir_count # will print just 2
e pode ser útil para condições, como:if (( $dir_count > 1 )); then echo "Yaa"; fi # will print "Yaa"
Se você tiver apenas diretórios na pasta e nenhum arquivo, será o seguinte:
fonte
A melhor maneira de navegar até sua unidade e simplesmente executar
e localizar todas as pastas no total, incluindo subdiretórios?
... ou encontrar todas as pastas no diretório raiz (sem incluir subdiretórios)?
Felicidades!
fonte
-lR
ignora o diretório com prefixo de ponto enquanto osfind -type d
conta. Portanto, a contagem fornecida pelo primeiro comando está errada se você tiver diretórios com prefixo de ponto (por exemplo, você tem subdiretório .git!). Você não pode simplesmente usar-lRa
porque também obtém para cada diretório uma entrada.
e..
. Aplica-se também à resposta de @Pavel AnossovExecute
stat -c %h folder
e subtraia 2 do resultado. Isso emprega apenas um único subprocesso, em oposição aos 2 (ou mesmo 3) exigidos pela maioria das outras soluções aqui (normalmentefind
maiswc
).Usando sh / bash:
Usando csh / tcsh:
Explicação:
stat -c %h folder
imprime o número de links físicos para a pasta e cada subpasta dentro da pasta contém uma entrada ../ que é um link físico de volta para a pasta . Você deve subtrair 2 porque há dois hardlinks adicionais na contagem:fonte
Eu acho que o mais fácil é
onde
images
está o seu diretório de destino. O sinalizador -d limita os diretórios, e o sinalizador -l executará uma listagem por linha, compatível com o muito familiarwc -l
para contagem de linha.fonte
man ls
,-d
does: "lista os próprios diretórios, não seus conteúdos", ou seja, se você executarls /tmp
, obterá o que está dentro/tmp
, e se executar,ls -d /tmp
apenas obterá/tmp
. A-d
opção não filtra diretórios, conforme solicitado.Alguns exemplos úteis:
contar arquivos no diretório atual
contar dirs no diretório atual
contar arquivos e diretórios no diretório atual
conte os arquivos e diretórios em um subdiretório
Notei uma coisa estranha (pelo menos no meu caso):
fonte
Número do diretório que podemos encontrar usando o comando abaixo
ls -l | grep "^d" | wc -l
fonte
ls -l | grep ^d | wc -l
"
Uma solução bash pura:
Se você também quiser contar os diretórios ocultos:
Observe que isso também contará links para diretórios. Se você não quiser isso, é um pouco mais difícil com esse método.
Usando
find
:O truque é gerar um
x
para stdout cada vez que um diretório for encontrado e, em seguida, usarwc
para contar o número de caracteres. Isso contará o número de todos os diretórios (incluindo os ocultos), excluindo os links.Os métodos apresentados aqui estão todos protegidos contra caracteres engraçados que podem aparecer em nomes de arquivo (espaços, novas linhas, caracteres glob, etc.).
fonte
Usando
zsh
:O
N
é um nullglob,/
faz com que corresponda a diretórios,#
contagens. Ele lidará perfeitamente com os espaços nos nomes dos diretórios e também retornará0
se não houver diretórios.fonte
Contar todos os arquivos e subpastas, estilo do Windows:
fonte
Se você quiser usar expressões regulares, tente:
fonte
A melhor resposta para o que você quer é
isso subtrai um para remover o indesejado '.' diretório que encontra listas (como patel deven mencionado acima).
Se você quiser contar as subpastas recursivamente, basta deixar a opção maxdepth, então
PS Se você achar a substituição de comandos feia, subtrair um pode ser feito como um fluxo puro usando
sed
ebc
.Subtraindo um da contagem:
ou, adicionando a contagem a menos um:
fonte
Melhor maneira de fazer isso:
Isso dá a você a contagem perfeita.
fonte
total
? seu método está quebrado:(
. Não analisels
!