você está aqui: Home  → Arquivo de Mensagens

Contagem de arquivos em um diretório

Colaboração: Valmir Pimenta

Data de Publicação: 16 de setembro de 2010

Hoje precisei de uma forma de obter uma contagem de arquivos em um diretório no meu servidor GNU/Linux que estava muito cheio. Infelizmente o ls não apresenta esta contagem automaticamente para nós.

Usei então o seguinte comando:

  ls -la|grep -e "^-"|wc -l

Ficou ótimo. Pensei então, e quantos diretórios a pasta contem? Foi só adaptar:

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

Agora, bom mesmo seria se tivesse um comando pra isto. Nada demais:

  alias fid=`echo "Arquivos: $(ls -la |grep "^-"|wc -l)  Diretórios: $(ls -la|grep "^d"|wc -l)"`

Para não ter que fazer isto sempre, coloque o alias no seu script de inicialização e toda vez que precisar saber o número de arquivos e diretórios dentro do diretório atual, basta usar o comando

  fid


 

 

Veja a relação completa dos artigos de Valmir Pimenta

Opinião dos Leitores

Valmir Pimenta
21 Set 2010, 12:23
Obrigado pelas dicas nas espostas.

Ole Peter, a idéia é imprimir só a cotagem. Seu modo funciona também ams é mais extenso.

Renato, interessante esta funcionalidade do zsh. Mas como ainda estou dando meus primeiros passos no bash, vou guardar pra mais tarde.

Genilson, Valeu pela dica. Já incorporei. De fato, a versão aqui foi a primeira que criei agora ela esta assim:

alias oid='fl=`ls -lA|cut -c1`; echo -e "Inventário de objetos no diretório $(pwd) \n\nArquivos: \t" $(echo "$fl"|grep -c -) "\nDiretórios: \t" $(echo "$fl"|grep -c d) "\nsoft-Links: \t" $(echo "$fl"|grep -c l) "\nSockets: \t" $(echo "$fl"|grep -c s) "\nDispositivos: \t" $(echo "$fl"|grep -c [c,b]) "\n

Assim só usa o ls uma vez e conta muitas coisas diferentes. Se queiser que conte incluindo subdiretórios, use ls -lAR no lugar de ls -lA.

Carlos, obrigado.
Ole Peter Smith
20 Set 2010, 20:28
ls -la | cat -n
tambem devia funcionar
Renato Botelho
16 Set 2010, 11:14
Pra quem se interessar, o zsh possui flags específicas pra wildcard de seleção que servem pra qualquer comando. Por exemplo, para listar todos os diretórios:

# ls -d *(/)

Os seguintes flags são permitidos:

% -- device files
) -- end of qualifiers
* -- executable plain files
+ -- + command name
- -- follow symlinks toggle
. -- plain files
/ -- directories
: -- modifier
= -- sockets
@ -- symbolic links
A -- group-readable
D -- glob dots
E -- group-executable
F -- non-empty directories
G -- owned by EGID
I -- group-writeable
L -- + size
M -- mark directories
N -- use NULL_GLOB
O -- + sort order, down
R -- world-readable
S -- setgid
T -- mark types
U -- owned by EUID
W -- world-writeable
X -- world-executable
[ -- + range of files
^ -- negate qualifiers
a -- + access time
c -- + inode change time
d -- + device
e -- execute code
f -- + access rights
g -- + owning group
l -- + link count
m -- + modification time
n -- numeric glob sort
o -- + sort order, up
p -- name pipes (FIFOS)
r -- owner-readable
s -- setuid
t -- sticky bit set
u -- + owning user
w -- owner-writeable
x -- owner-executable
Jean Rodrigo Ferri
16 Set 2010, 11:00
Uma dica, há uma forma mais, digamos, canônica para listar somente arquivos ou somente diretórios:

Arquivos: $ find . -maxdepth 1 -type f
Diretórios: $ find . -maxdepth 1 -type d

Onde '-type' você define o tipo arquivo (f) ou diretório (d) e '-maxdepth' você define a profundidade da busca.

Abraço,

@JeanFerri
Carlos Dias
16 Set 2010, 08:30
Show de Bola.
Genilson
16 Set 2010, 08:20
Para a listagem de diretórios, talvez seja interessante usar "ls -lA" ao invés de "ls -la", evitando que "." e ".." entrem na conta de diretórios também.
Aparentemente links simbólicos também não são levados em conta na contagem de arquivos, certo?
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script