Quero ver quantos arquivos existem nos subdiretórios para descobrir onde todo o uso do inode está no sistema. Mais ou menos como eu faria isso pelo uso do espaço
du -sh /*
o que me dará o espaço usado nos diretórios fora da raiz, mas nesse caso eu quero o número de arquivos, não o tamanho.
disk-usage
recursive
inode
xenoterracida
fonte
fonte
du -sh /*
deixou bem claro como eu queria que a contagem funcionasse. mesma coisa, basta contar os arquivos e não os bytes.Respostas:
Agradecimentos a Gilles e xenoterracide pelas correções de segurança / compatibilidade.
A primeira parte:
find -maxdepth 1 -type d
retornará uma lista de todos os diretórios no diretório de trabalho atual. Isso é canalizado para ...A segunda parte:
while read -r dir; do
inicia um loop while - enquanto o canal entrando no while estiver aberto (que é até que toda a lista de diretórios seja enviada), o comando read colocará a próxima linha na variável "dir". Então continua ...A terceira parte:
printf "%s:\t" "$dir";
imprimirá a string em "$ dir" (que contém um dos nomes de diretório) seguido por uma guia.A quarta parte:
find "$dir -f file"
faz uma lista de todos os arquivos dentro do nome do diretório contido em "$ dir". Esta lista é enviada para ..A quinta parte:
wc -l;
conta o número de linhas que são enviadas para sua entrada padrão.A parte final:
done
simplesmente termina o loop while.Portanto, obtemos uma lista de todos os diretórios no diretório atual. Para cada um desses diretórios, geramos uma lista de todos os arquivos nele, para que possamos contar todos eles usando
wc -l
. O resultado será semelhante a:fonte
read -r
comoread
trata simples barras invertidas especialmente. Entãoecho -en "$dir:\t"
, novamente, fará as barras invertidas; uma correção simples é usar em seuprintf '%s:\t' "$dir"
lugar. Em seguida,$dir
deve ser"$dir"
( sempre use aspas duplas em torno das substituições de variáveis ).find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" | wc -l; done
sort -n -r -k2
ao final deste, para os lotes de diretórios, de modo que eu sei onde o mais uso é-type f
para listar os arquivos:find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
Tente
find . -type f | wc -l
, ele contará todos os arquivos no diretório atual, bem como todos os arquivos nos subdiretórios. Observe que todos os diretórios não serão contados como arquivos, apenas arquivos comuns.fonte
Aqui está uma compilação de alguns comandos úteis de listagem (redimensionados com base no código de usuários anteriores):
Listar pastas com contagem de arquivos:
Listar pastas com contagem de arquivos diferente de zero:
Listar pastas com contagem de subpastas:
Listar pastas com contagem de subpastas diferente de zero:
Listar pastas vazias:
Listar pastas não vazias com contagem de conteúdo:
fonte
Experimentar:
como ponto de partida ou se você realmente deseja apenas recursar pelos subdiretórios de um diretório (e pular os arquivos nesse diretório de nível superior)
fonte
find
funciona recursivamente por todos os subdiretórios por padrão. Se você deseja que ele funcione em vários locais, é possível especificar todos eles entrefind
e-type
.698035
. Eu deveria ver cerca de 6 números./home
? Eu estaria 100% certo de que você não.A solução a seguir conta o número real de inodes usados a partir do diretório atual:
Para obter o número de arquivos do mesmo subconjunto, use:
Para soluções que exploram apenas subdiretórios, sem levar em conta os arquivos no diretório atual, você pode consultar outras respostas.
fonte
find -printf '%i\n' | sort -u | wc -l
. Se você queria ser portátil, seria necessáriofind . -exec ls -id {} + | cut …
.O OS X 10.6 engasga com o comando na resposta aceita, porque não especifica um caminho para
find
. Em vez disso, use:fonte
Sei que estou atrasado para a festa, mas acredito que essa
bash
solução pura (ou outra concha que aceite globos de estrela dupla) possa ser muito mais rápida em algumas situações:resultado:
fonte
Faça uma tentativa:
Deve funcionar bem, a menos que os nomes de arquivos incluam novas linhas.
fonte
-maxdepth 1
imediatamente após o primeirofind
. Se você deseja incluir o número de subdiretórios em sua contagem, remova o-type f
no final (isso deveria ter sido realmente! -type d
assim mesmo, para que todos os arquivos que não sejam de diretório fossem incluídos).Se você tiver o
ncdu
instalado (obrigatório quando você quiser fazer uma limpeza), digitec
"Alternar a exibição das contagens de itens filhos". EC
para "Classificar por itens".fonte
du --inodes
Não sei por que ninguém (inclusive eu) estava ciente de:
Tenho certeza de que isso resolve o problema do OP. Comecei a usá-lo muito para descobrir onde está todo o lixo em minhas unidades enormes (e descarregá-lo em um disco antigo).
Mais informações
Se você NÃO deseja recorrer (o que pode ser útil em outras situações), adicione
fonte