
Quero ls os arquivos que contêm a substring "s1r", "s2r", "s3r" ou "s19r" em seus nomes de arquivos.
Eu estou quase lá!
Tentativas fracassadas:
ls *s[123][9?]r*
O texto acima me fornece apenas arquivos incluindo a substring
s19r
Enquanto
ls *s[1-3]|[19]r*
retorna
-bash: [19]r*: comando não encontrado
ls: *s[1-3]: Arquivo ou diretório inexistente
Ou seja, não reconhece o or | operador - o que faz sentido, pois também é usado para canalizar.
Como faço para encontrar os arquivos que contêm "s1r", "s2r", "s3r" ou "s19r"?
Responder1
Usar ls *s1r* *s2r* *s3r* *s19r*
.
Se você se preocupa com arquivos não existentes, você pode definir a opção nullglob:
nullglob
If set, bash allows patterns which match no files (see
Pathname Expansion above) to expand to a null string,
rather than themselves.
Se o seu shell não for bash, provavelmente existe uma maneira semelhante. Dê uma olhada na página de manual.
Responder2
Você pode querer tentar isto:
ls *s?([123])r* *s19r*
Por exemplo
Tenho um diretório com os seguintes arquivos:
% ls | column
s10r s12r s14r s16r s18r s1r s2r s4r s6r s8r
s11r s13r s15r s17r s19r s23r s3r s5r s7r s9r
Usando o ls mencionado acima:
% ls *s?([123])r* *s19r*
s19r s1r s2r s3r
Veja omanual bash sobre correspondência de padrõespara mais detalhes.