Estou tentando limpar um disco rígido que tenha todos os tipos de porcaria acumulados ao longo dos anos. du
ajudou a reduzir o uso do disco, mas a coisa toda ainda não é difícil devido ao tamanho total, mas ao grande número de arquivos e diretórios no total.
Existe uma maneira de fazer algo como, du
mas sem contar o tamanho do arquivo, mas o número de arquivos e diretórios? Por exemplo: um arquivo é 1 e um diretório é o número recursivo de arquivos / diretórios dentro dele + 1.
Edit: Eu deveria ter sido mais claro. Eu gostaria de não só saber o número total de arquivos / diretórios em /
, mas também em /home
, /usr
etc, e em seus subdiretórios, de forma recursiva, como du
faz para o tamanho.
Respostas:
Eu achei
du --inodes
útil, mas não tenho certeza de qual versãodu
requer. No Ubuntu 17.10, o seguinte funciona:Combine com
| sort -nr
para classificar decrescente pelo número de inodes contendo.fonte
A maneira mais fácil parece ser
find /path/to/search -ls | wc -l
O Find é usado para percorrer todos os arquivos e pastas.
-ls
para listar (imprimir) todos os nomes. Esse é um padrão e, se você deixar de fora, continuará funcionando da mesma forma em quase todos os sistemas. (Quase, já que alguns podem ter padrões diferentes). É um bom hábito usar explicitamente isso.Se você apenas usar a
find /path/to/search -ls
peça, ela imprimirá todos os arquivos e diretórios na sua tela.wc
é contagem de palavras. a-l
opção diz para contar o número de linhas.Você pode usá-lo de várias maneiras, por exemplo
A primeira opção permite que o wc abra um arquivo e conte o número de linhas, palavras e caracteres nesse arquivo. A segunda opção faz o mesmo, mas sem o nome do arquivo, ele lê do stdin.
Você pode combinar comandos com um pipe
|
. A saída do primeiro comando será canalizada para a entrada do segundo comando. Assim,find /path/to/search -ls | wc -l
usa find para listar todos os arquivos e diretórios e alimenta a saída para wc. Wc então conta o número de linhas.(Uma outra alternativa seria `ls | wc ', mas encontrar é muito mais flexível e uma boa ferramenta para aprender.)
[Editar após o comentário]
Pode ser útil combinar o find e o exec.
Por exemplo
find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
, listará todos os diretórios em /, exceto alguns que você não deseja pesquisar. Podemos acionar o comando anterior em cada um deles, produzindo uma soma de arquivos por pasta em /.Contudo:
Ele funcionará no Linux, mas não em qualquer unix-a-similar.
fonte
O seguinte script PHP faz o truque.
Coloque isso em um arquivo (digamos "
treesize
")chmod +x
e execute-o com./treesize . | sort -rn | less
.fonte
du
isso simplesmente conta em vez de somar o tamanho, que é exatamente o que a pergunta original fez.ncdu é ótimo para isso!
Na página de manual, você também pode mostrar contagens por diretório e ordená-las por contagens:
Por exemplo:
fonte
Explorar o fato de que diretórios e arquivos são separados por
/
. Esse script cumpre seus critérios, mas serve para inspirar uma solução completa. Você também deve indexar seus arquivos com a localização.>
>
fonte
Aqui está uma solução que usa o bash, inspirada em um post do Unix e Linux .
Se houver algumas pastas nas quais você não deseja ver os detalhes, como
.git
, você pode excluí-las da lista comgrep
.fonte