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 ls
o a find
usando 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*out
coincidiría con cualquier nombre que contenga la cadena abc
y luego termine en out
.
Si ningún archivo coincide con el patrón, el patrón se dejará sin expandir. Si eso sucede, ls
obtendrá el patrón *abc*out
como 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 bash
muestre 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 failglob
opció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"