contando arquivo específico no diretório

contando arquivo específico no diretório

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, .oem vez deo

No entanto, uma maneira melhor seria usar find:

find . -maxdepth 1 -name '*o' -printf 'x' | wc -c

Você pode adicionar -type fpara limitá-lo a arquivos simples (excluir diretórios) e remover -maxdepth 1se 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 nullglobor failglobshell:

shopt -s nullglob
shopt -s failglob

informação relacionada