"o" en shell glob

"o" en shell glob

Quiero localizar los archivos que contienen la subcadena "s1r", "s2r", "s3r" o "s19r" en sus nombres de archivo.

¡Estoy casi allí!

Intentos fallidos:

ls *s[123][9?]r*

Lo anterior me da sólo archivos que incluyen la subcadena

s19r

Mientras

ls *s[1-3]|[19]r*

devoluciones

-bash: [19]r*: comando no encontrado

ls: *s[1-3]: No existe tal archivo o directorio

Es decir, no reconoce el o | operador - lo cual tiene sentido ya que también se usa para canalizar.

¿Cómo puedo encontrar los archivos que contienen "s1r", "s2r", "s3r" o "s19r"?

Respuesta1

Usar ls *s1r* *s2r* *s3r* *s19r*.

Si le interesan los archivos que no existen, puede configurar la opción nullglob:

          nullglob
                  If  set,  bash allows patterns which match no files (see
                  Pathname Expansion above) to expand to  a  null  string,
                  rather than themselves.

Si su shell no es bash, probablemente exista una forma similar. Eche un vistazo a su página de manual.

Respuesta2

Quizás quieras probar esto:

ls *s?([123])r* *s19r*

Por ejemplo

Tengo un directorio con los siguientes archivos:

% ls | column
s10r    s12r    s14r    s16r    s18r    s1r s2r s4r s6r s8r
s11r    s13r    s15r    s17r    s19r    s23r    s3r s5r s7r s9r

Usando el ls mencionado anteriormente:

% ls *s?([123])r* *s19r*
s19r  s1r  s2r  s3r

Ver elmanual de bash sobre coincidencia de patronespara más detalles.

información relacionada