“or” no shell glob

5

Eu quero ls os arquivos contendo a substring "s1r", "s2r", "s3r" ou "s19r" em seus nomes de arquivos.

Estou quase lá!

Tentativas frustradas:

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*: command not found

ls: *s[1-3]: No such file or directory

Ou seja, não reconhece o ou | operador - o que faz sentido, pois também é usado para canalizar.

Como faço para os arquivos que contêm "s1r", "s2r", "s3r" ou "s19r"?

    
por The Unfun Cat 24.04.2013 / 09:21

2 respostas

5

Use ls *s1r* *s2r* *s3r* *s19r* .

Se você se preocupa com arquivos não existentes, 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 é bash, provavelmente existe um caminho similar. Dê uma olhada na man page.

    
por 24.04.2013 / 09:29
1

Você pode tentar isso:

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

Por exemplo

Eu 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 os sls mencionados acima:

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

Consulte o manual do bash sobre correspondência de padrões para obter mais detalhes.

    
por 24.04.2013 / 10:41