- Gerar link
- X
- Outros aplicativos
Postagem em destaque
- Gerar link
- X
- Outros aplicativos
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.
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.
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.
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.
Testando:
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.
Testando...
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.
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.
- Gerar link
- X
- Outros aplicativos
Comentários
Muito bom.
ResponderExcluirBacana man!
ResponderExcluir