Contar o número de arquivos e subdiretórios de um diretório

Publicado por Andre Costa (última atualização em 17/03/2012)

[ Hits: 30.797 ]

Download conta.sh

Download conta2.sh (versão 2)




Sempre tive dificuldade de conseguir este tipo de informação facilmente, por isto resolvi fazer este pequeno script. Simples mas às vezes bastante útil.

  



Versões atualizadas deste script

Versão 2 - Enviado por Almir Neto em 17/03/2012

Changelog: #!/bin/bash

DIR="$1"

# Caso nao seja digitado nenhum diretorio,
# Sera usado o diretorio corrente por padrao
if ! [ $DIR ]
then
DIR='.'
fi


NUMDIR=$(ls -lR "$DIR" | grep '^d' | wc -l)
NUMLIN=$(ls -lR "$DIR" | grep '^l' | wc -l)
NUMARQ=$(ls -lR "$DIR" | grep '^-' | wc -l)

echo "Existem $NUMDIR diretórios, $NUMLIN links simbólicos e $NUMARQ arquivos no diretório $DIR"

Download conta2.sh


Esconder código-fonte

#!/bin/bash
DIR="$1"

# Caso nao seja digitado nenhum diretorio,
# Sera usado o diretorio corrente por padrao
if ! [ $DIR ]
    then
    DIR='.'
fi

NUMARQ=0
NUMDIR=0
lista(){
for ARQ in $( ls $1/ )
  do
  [ -d "$1/$ARQ" ] && { NUMDIR=$(($NUMDIR+1)); lista $1/$ARQ; }
  [ -f "$1/$ARQ" ] && NUMARQ=$(($NUMARQ+1))
done
}
lista $DIR
echo "Existem $NUMARQ arquivos e $NUMDIR diretorios em '$DIR'."

Scripts recomendados

Backup MySQL Incremental via RSYNC/FTP

Seletor de wallpaper para fluxbox modo grafico

pdfcon - leitor de PDF em modo texto

Criando contas de usuario em varios servidores ao mesmo tempo

rename


  

Comentários
[1] Comentário enviado por gricardo87 em 10/03/2012 - 07:05h

Bom dia!

Achei um erro no seu script amigo, em casos de pastas/arquivos com nomes compostos!

Segue o teste:

#primeiro um ls
gabriel@home:~/teste$ ls -l
total 4
drwxr-xr-x 2 gabriel gabriel 4096 2012-03-10 07:12 abacate azedo

#perceba que existe um nome de uma pasta "abacate azedo".
#seu script
gabriel@home:~/teste$ /home/gabriel/lista.sh /home/gabriel/teste
Existem 0 arquivos e 0 diretorios em '/home/gabriel/teste'.

#Isso acontece pq ele testa: /home/gabriel/teste/abacate
#Depois testa: /home/gabriel/teste/azedo
E nenhum dos arquivos existe.

Uma maneira mais facil de contar isso, é com ls + grep

#lista recursivamente todo conteudo da pasta, o que for pasta ele conta:
ls -Rl $pasta | egrep -c "^d"

#lista recursivamente todo conteudo da pasta, o que for arquivo ele conta:
ls -Rl $pasta | egrep -c "^\-"


[2] Comentário enviado por almirneo em 17/03/2012 - 10:52h

Bom dia André.

Conforme o comentário do Gabriel Ricardo, realmente pode ocorrer o problema citado por ele.

Fiz uma modificação no seu script e enviei para a fila de espera.

Efetuei a modificação baseado no exemplo do Gabriel Ricardo usando listagem recursiva com expressão regular.

Acrescentei a contagem para links simólicos também.

Espero ter ajudado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts