Como faço para contar todos os arquivos que começam com letras de a para g?

3

Eu tenho uma pergunta sobre os comandos do Linux. Como faço para contar todos os arquivos que começam com letras de a para g?

    
por Adam 08.11.2012 / 21:22

5 respostas

7

LC_ALL=C
set -- [a-gA-G]*
if [ "$1" = '[a-gA-G]*' ]; then
  echo 0
else
  echo "$#"
fi          
    
por 08.11.2012 / 22:38
4

Você pode fazer isso com um comando shell de uma linha:

find / -name '[abcedfg]*' -print | wc -l

Você verá algumas mensagens sobre como find não tem permissão para ler algum diretório ou outro, mas você terá uma contagem de arquivos cujos nomes começam com essas 7 letras.

    
por 08.11.2012 / 21:27
2

O GNU find pode fazer isso por você:

find ./ -type f -maxdepth 1 -iname "[a-g]*" 2> /dev/null | wc -l

isso encontra todos os arquivos (não diretórios) em ./ , mas não acessa diretórios adicionais e corresponde ao nome (insensível a maiúsculas) do arquivo que começa com "ag", redireciona todos os erros para /dev/null e depois conta os arquivos

    
por 08.11.2012 / 21:27
2

A implementação GNU do comando ls (que você está usando desde que você está executando o Linux) encontrará todos os arquivos no diretório atual, começando com um caractere a-g.

ls --ignore='[!a-g]*'

Diz para ignorar todos os arquivos que não iniciam com um caractere no intervalo [a-g] . O ! inverte o filtro. * indicat

Em seguida, execute a saída em wc -l para contar as linhas.

O comando completo será assim:

ls --ignore='[!a-g]*' | wc -l

Esta solução não se repetirá em subdiretórios.

    
por 08.11.2012 / 21:44
1
ls -1 [a-g]* | wc -l

Por que gosta disso? Porque você provavelmente quer a resposta mais simples; este assume que você não precisa se preocupar em não contar os diretórios, nem procurar os subdiretórios, nem os nomes de arquivos em maiúsculas ... e esse é o comando que mais uso.

    
por 09.11.2012 / 05:30

Tags