Usando expansión de llaves

Usando expansión de llaves

Básicamente quiero sumar estas dos líneas cmd juntas

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

Estoy buscando un archivo que contenga A y B (minúsculas o mayúsculas) y puedan aparecer más de una vez.

Esto es lo que probé:

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

Respuesta1

Usando expansión de llaves

Un método es utilizar la expansión de llaves. Consideremos un directorio con estos archivos:

$ ls
1a2a3  1a2b3  1b2A3  1b2b3

Para seleccionar los que tienen ambos ay ben cualquier caso:

$ ls *{[bB]*[aA],[aA]*[bB]}*
1a2b3  1b2A3

Mejora

Un posible problema es cómo se comporta la expansión de llaves si una de las opciones no tiene archivos coincidentes. Considere un directorio con estos archivos:

$ ls
1a2a3  1b2A3  1b2b3

Ahora, ejecutemos nuestro comando:

$ ls *{[bB]*[aA],[aA]*[bB]}*
ls: cannot access '*[aA]*[bB]*': No such file or directory
1b2A3

Si no nos gusta ese mensaje de advertencia, podemos configurar nullglob y desaparecerá:

$ shopt -s nullglob
$ ls *{[bB]*[aA],[aA]*[bB]}*
1b2A3

Sin embargo, una limitación de este enfoque es que, si ninguno de los glob coincide, lsse ejecuta sin argumentos y, en consecuencia, enumerará todos los archivos.

Usando globos extendidos

Consideremos nuevamente un directorio con estos archivos:

$ ls
1a2a3  1a2b3  1b2A3  1b2b3

Ahora, establezcamos extglob:

$ shopt -s extglob

Y usemos un globo extendido para encontrar nuestros archivos:

$ ls *@([bB]*[aA]|[aA]*[bB])*
1a2b3  1b2A3

Respuesta2

Si no te importa pedir grepayuda entonces

ls *[aA]* | grep -i b

lo hará también.

información relacionada