File Globbing: adicionando * [Aa] * & * [Bb] * juntos [duplicados]

4

Então, basicamente, quero adicionar essas duas linhas de cmd juntas

ls *[Aa]* 
ls *[Bb]*

Estou procurando um arquivo que contenha A e B (inferior ou maiúsculo) e eles possam aparecer mais de uma vez.

Veja o que tentei:

ls *[Aa]*&&*[Bb]*
    
por epikish 26.09.2016 / 03:41

2 respostas

6

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
    
por 26.09.2016 / 04:16
2

Se você não se importa em chamar grep para ajuda, então

ls *[aA]* | grep -i b

também funcionará.

    
por 26.09.2016 / 10:04