Usar múltiples comodines en un solo globo

Usar múltiples comodines en un solo globo

En mi directorio, tengo una lista de archivos con diferentes extensiones como

file-abc-12.out
file-abc-12.csv
file-abc-12.txt
file-xyz-12.out
file-xyz-12.csv
file-xyz-12.txt
file-abc-04.out
file-abc-04.csv
file-abc-04.txt
file-xyz-04.out
file-xyz-04.csv
file-xyz-04.txt

Si solo quiero enumerar los archivos que contienen abc y terminan en .out, ¿cómo lo haría? Quiero realizar a lso a findusando dos búsquedas de coincidencia de patrones *abc*y *out. Sólo sé cómo buscar uno u otro a la vez, ¿cómo puedo hacer para buscar nombres de archivos con ambas condiciones?

Respuesta1

Esto te dará lo que quieres:

$ find . -name '*abc*' -o -name '*out'

Respuesta2

Estoy interpretando el "y" utilizado en la pregunta como un "y lógico" estricto, es decir, como "buscar archivos cuyos nombres coincidanambos *abc*y *out".

Puede utilizar varios comodines en un patrón global de nombre de archivo:

$ ls *abc*out

o

$ find . -type f -name "*abc*out"

Por ejemplo.

El patrón *abc*outcoincidiría con cualquier nombre que contenga la cadena abcy luego termine en out.

Si ningún archivo coincide con el patrón, el patrón se dejará sin expandir. Si eso sucede, lsobtendrá el patrón *abc*outcomo argumento en lugar de un nombre de archivo válido y se quejará ls: cannot access *abc*out: No such file or directory.

Para que se bashmuestre un error sobre no poder expandir un patrón global de archivos en lugar de pasar el patrón no expandido a ls, configure la failglobopción Shell:

bash-4.4$ ls *abc*out
ls: *abc*out: No such file or directory

bash-4.4$ shopt -s failglob

bash-4.4$ ls *abc*out
bash: no match: *abc*out

Respuesta3

La solución que encontré que funcionó para mí implicó el uso de grep. Sigue:

$ ls *out | grep "abc"

información relacionada