"ou" no shell glob

"ou" no shell glob

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.

informação relacionada