contando arquivo específico no diretório

1

Vamos supor que eu 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.

    
por deepblue_86 17.10.2015 / 19:17

2 respostas

4

Você provavelmente só precisará remover o . de sua expressão glob - o que faz com que ele corresponda apenas aos arquivos que terminam em .o em vez de o

No entanto, a melhor maneira 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 o -maxdepth 1 se quiser contar recursivamente.

    
por steeldriver 17.10.2015 / 19:35
4

Não use ls .

Use uma matriz de 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 um ponto justo, se você não tem nomes de arquivos correspondentes, o padrão glob será tomado literalmente. Devido a isso, mesmo que não haja nomes de arquivo correspondentes, você ainda obterá a contagem de arquivos como 1.

Para superar isso, defina a opção nullglob ou failglob shell:

shopt -s nullglob
shopt -s failglob
    
por heemayl 17.10.2015 / 19:33