LC_ALL=C
set -- [a-gA-G]*
if [ "$1" = '[a-gA-G]*' ]; then
echo 0
else
echo "$#"
fi
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?
LC_ALL=C
set -- [a-gA-G]*
if [ "$1" = '[a-gA-G]*' ]; then
echo 0
else
echo "$#"
fi
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.
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
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.
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.