Vamos supor que preciso contar todos os arquivos no diretório que termina com o. (por exemplo ab12.14o, 70010340.09o). Qual comando eu preciso usar?
Eu tentei ls *.o | wc
, mas não funciona.
Responder1
Você provavelmente só precisa remover o .
da sua expressão glob - o que faz com que ele corresponda apenas aos arquivos que terminam em, .o
em vez deo
No entanto, uma maneira melhor seria usar find
:
find . -maxdepth 1 -name '*o' -printf 'x' | wc -c
Você pode adicionar -type f
para limitá-lo a arquivos simples (excluir diretórios) e remover -maxdepth 1
se quiser contar recursivamente.
Responder2
Não use ls
.
Use um array shell para armazenar o nome dos arquivos que terminam em o
:
files=( *o )
Agora faça:
echo "${#files[@]}"
para obter o número de arquivos.
@steeldriver fez uma observação justa: se você não tiver nomes de arquivo correspondentes, o padrão glob será interpretado literalmente. Por causa disso, mesmo que não haja nomes de arquivos correspondentes, você ainda obterá a contagem de arquivos como 1.
Para superar isso, defina a opção nullglob
or failglob
shell:
shopt -s nullglob
shopt -s failglob