
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.