Usando a expansão da chave
Um método é usar a expansão de contraventamento. Vamos considerar um diretório com esses arquivos:
$ ls
1a2a3 1a2b3 1b2A3 1b2b3
Para selecionar os que têm a
e b
nos dois casos:
$ ls *{[bB]*[aA],[aA]*[bB]}*
1a2b3 1b2A3
Melhoria
Um possível problema é como a expansão de chaves se comporta se uma das opções não tiver arquivos correspondentes. Considere um diretório com esses arquivos:
$ ls
1a2a3 1b2A3 1b2b3
Agora, vamos executar nosso comando:
$ ls *{[bB]*[aA],[aA]*[bB]}*
ls: cannot access '*[aA]*[bB]*': No such file or directory
1b2A3
Se não gostarmos dessa mensagem de aviso, poderemos definir o nullglob e ele desaparecerá:
$ shopt -s nullglob
$ ls *{[bB]*[aA],[aA]*[bB]}*
1b2A3
Uma limitação desta abordagem, porém, é que, se nenhuma das combinações de glob, então ls
é executado sem argumentos e, consequentemente, listará todos os arquivos.
Usando globs estendidos
Vamos considerar novamente um diretório com esses arquivos:
$ ls
1a2a3 1a2b3 1b2A3 1b2b3
Agora, vamos definir extglob
:
$ shopt -s extglob
E, vamos usar um glob estendido para encontrar nossos arquivos:
$ ls *@([bB]*[aA]|[aA]*[bB])*
1a2b3 1b2A3