A melhor maneira de expandir o padrão glob?

26

Eu preciso expandir um padrão global (como ../smth*/* ou /etc/cron*/ ) em uma lista de arquivos, programaticamente. Qual seria a melhor maneira de fazer isso?

    
por Rogach 12.03.2012 / 14:28

1 resposta

33

Apenas deixe expandir dentro do lado direito de uma declaração de matriz:

list=(../smth*/)          # grab the list
echo "${#list[@]}"        # print array length
echo "${list[@]}"         # print array elements
for file in "${list[@]}"; do echo "$file"; done  # loop over the array


Observe que a opção nullglob do shell precisa ser definida.
Não é definida por padrão.
Isso evita um erro no caso de o glob (ou um dos vários globs) não corresponder a nenhum nome.

Defina em bash com

shopt -s nullglob

ou em zsh com

setopt nullglob
    
por 12.03.2012 / 14:37