
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 a
y b
en 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, ls
se 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 grep
ayuda entonces
ls *[aA]* | grep -i b
lo hará también.