Como faço para filtrar um glob no zsh

7

Basicamente eu posso usar um glob em zsh para uma lista. Muitas vezes, eu gostaria de filtrar essa lista, embora eu esteja me perguntando se preciso fazer isso.

O zsh tem um método para filtrar uma lista? Temo que essa seja uma pergunta óbvia, mas hoje é um dia de baixa produtividade mentalmente.

    
por chiggsy 13.02.2012 / 00:55

1 resposta

14

Esta é uma pergunta meio estranha, já que o zsh é o único shell com esse recurso. É chamado de qualificadores da glob. O manual é, como sempre, bastante conciso e desprovido de exemplos. A página Zsh-lovers tem alguns exemplos. Pesquisando zsh "glob qualifiers" inventa alguns posts e tutoriais. Você também pode pesquisar por "glob qualifier" neste site .

Os básicos: qualificadores glob estão entre parênteses no final do glob. Os mais úteis são os sinais de pontuação para selecionar apenas determinados tipos de arquivos.

echo *(/)      # directories
echo *(.)      # regular files
echo *(@)      # symbolic links
echo *(-/)     # directories and symbolic links to directories

Existem outros qualificadores para filtrar metadados, como tamanho, data e propriedade.

# files owned by the user running zsh, over 1MB, last modified more than 7 days ago
echo *(ULm+1m+7)

Os qualificadores Glob também podem controlar a ordem das partidas e restringir o número de correspondências.

echo *(Om[1,10])     # The 10 oldest files

Você pode configurar filtros arbitrários chamando uma função, com o qualificador + (você pode até colocar o código em linha com o qualificador e , se você não se importar com as citações complicadas).

Note que, infelizmente, tudo isso só funciona em globs. Se você quiser construir uma lista de nomes de arquivos dessa maneira, você precisa filtrar quando estiver circulando. Se você deseja filtrar uma lista já criada, há uma sintaxe completamente diferente, sinalizadores de expansão de parâmetro , que podem executar apenas filtragem de texto simples ( "${(@)ARRAY:#PATTERN}" ).

    
por 13.02.2012 / 01:08

Tags