Postagem em destaque

Criando bot do Telegram em Shell script com ShellBot

Contar o total de arquivos contidos em um diretório

Com toda certeza você usuário Linux em algum momento da sua vida já utilizou o terminal para listar o conteúdo de um diretório ou até mesmo navegar entre eles. Apesar de existir inúmeras ferramentas (GUI) para essa finalidade, há usuários que não trocam o comando ls por nada; E hoje irei demonstrar como contar o total de arquivos existentes em um determinado diretório utilizando o velho e bom Shell. Lembrando que o Shell é a terra das possibilidades, onde podemos criar inúmeras soluções para o mesmo problema.

Para essa demonstração eu criei o diretório /teste localizado no home do meu usuário e dentro desse diretório há 37 arquivos de texto.

juliano@shellscriptx:~/teste$ ls
arq10.txt  arq14.txt  arq18.txt  arq21.txt  arq25.txt  arq29.txt  arq32.txt  arq36.txt  arq5.txt  arq9.txt
arq11.txt  arq15.txt  arq19.txt  arq22.txt  arq26.txt  arq2.txt   arq33.txt  arq37.txt  arq6.txt
arq12.txt  arq16.txt  arq1.txt   arq23.txt  arq27.txt  arq30.txt  arq34.txt  arq3.txt   arq7.txt
arq13.txt  arq17.txt  arq20.txt  arq24.txt  arq28.txt  arq31.txt  arq35.txt  arq4.txt   arq8.txt



A tarefa é bem simples. Utilizarei o comando ls listar os arquivos no diretório, porém para nosso objetivo é necessário que seja gerada uma lista contendo um arquivo por linha; para isso vou utilizar o parâmetro -1.

juliano@shellscriptx:~/teste$ ls -1
arq10.txt
arq11.txt
arq12.txt
arq13.txt
arq14.txt
arq15.txt
arq16.txt
arq17.txt
arq18.txt
arq19.txt
arq1.txt
arq20.txt
arq21.txt
arq22.txt
arq23.txt
arq24.txt
arq25.txt
arq26.txt
arq27.txt
arq28.txt
arq29.txt
arq2.txt
arq30.txt
arq31.txt
arq32.txt
arq33.txt
arq34.txt
arq35.txt
arq36.txt
arq37.txt
arq3.txt
arq4.txt
arq5.txt
arq6.txt
arq7.txt
arq8.txt
arq9.txt

Agora, com comando wc vou realizar a contagem. Para quem não o conhece, o wc conta o total de caracteres, palavras ou linhas de um arquivo ou expressão. Neste caso em especifico, vou utilizá-lo com o parâmetro -l que indica o total de linhas.

juliano@shellscriptx:~/teste$ ls -1 | wc -l
37

Está funcionando e quase pronto. Para ficar melhor vou criar uma função que irei chamá-la dê total_files, onde poderemos especificar o diretório do qual desejamos contar os arquivos.

$ total_files() { ls "$*" | wc -l; }

Testando:

juliano@shellscriptx:~/teste$ total_files .
37
juliano@shellscriptx:~/teste$ total_files /etc
241
juliano@shellscriptx:~/teste$ total_files /home
2
juliano@shellscriptx:~/teste$ total_files /etc/init.d/
68

Pronto, temos uma função que "funciona", simples e rápida.

Como havia dito antes, o Shell é a terra das possibilidades e com essas possibilidades vou criar uma função que faz exatamente a mesma coisa, porém
utilizando apenas expansão de variáveis e globbing.

$ total_files(){ f=("$*"/*); echo ${#f[@]}; }

Testando... 

juliano@shellscriptx:~/teste$ total_files .
37
juliano@shellscriptx:~/teste$ total_files /etc
241
juliano@shellscriptx:~/teste$ total_files /home
2
juliano@shellscriptx:~/teste$ total_files /etc/init.d/
68

Bom, espero que essa função possa ser útil no momento que precisar e não deixe de treinar sua criatividade, desenvolva suas próprias soluções. Então valeu, muito obrigado e até a próxima.

Comentários

Postar um comentário

Contato

Nome

E-mail *

Mensagem *