Buenas Romano,
cara, acabei de escrever uma dica sobre isso, que pode ser vista, criticada e comentada aqui:
O que acontece é que as opções do cmd test, ([...]ou [[...]]) são unárias, isto é só aceitam 1 único argumento. No cmd test antigo ([...]) e o shell fazia a expansão antes do cmd ser executado e isso acarretava erro. Para que não haja erro o novo test ([[...]]) expande os coringas, mas se isso resultar em mais de um, "desexpande ;)". Veja isso:
$ ls a*
a.txt aa.txt arq1 arq2 arq3 arq4 arq5
$ [ -e a* ] && echo existe # Olha a msg de erro - a opção é unária
bash: [: número excessivo de argumentos
$ [ -e a.* ] && echo existe # Funciona pq casou só com a.txt
existe
$ [[ -e a* ]] && echo existe # Expandiu e desexpandiu
$ [[ -e a.* ]] && echo existe # Expandiu só para a.txt
existe
Para verificar se o arquivo existe, vc pode simplesmente fazer:
$ ls arq* > /dev/null && {
echo existem os seguintes:
ls -l
}
Mas para saber se são arquivos do tipo normal, vc teria de fazer:
$ for Arq in arq*
{
[[ -f "$Arq" ]] && echo $Arq existe e é um arquivo de dados # poderia ser [ -f "$Arq" ]
}
OBS: Até uns 50+ arquivos com mesmo prefixo ou sufixo, é mais rápido fazer:
$
do que o touch arq{"",1,2,3} que vc usou. touch é para manipular timestamp, não é para criar arquivos. Experimente fazer:
time for ((i=1; i<200; i++))
{
> /tmp/arq
}
e depois:
time for ((i=1; i<200; i++))
{
touch /tmp/arq
}
Terminam hoje às 23:59 h ss matrículas para o meu Curso de Programação em Shell (de Nutella a Root).
Apesar da crise, resolvemos lançá-lo pensando que as pessoas estão com tempo para se preparar mais estudando e sair dessa crise numa situação melhor.
Mas como é tempo de crise, estamos dando, mas só nesse treinamento, 20% de desconto.
Veja os detalhes em https://educacao.dicas-l.com.br/shell-linux, mas não deixe de ver, pq o que propiciamos é bem diferente do que existe.