Verifique o argumento do script zsh em relação ao padrão em vários arquivos e mantenha o rastreamento do padrão correspondente para outras tarefas

1

Esta é uma questão ampliada de Como checar o parâmetro do script zsh em um padrão ou não

Enquanto o link acima resolveu o problema que um script zsh verifica seu primeiro argumento para lista de padrões em um arquivo separado por nova linha. Eu gostaria de estendê-lo como:

  1. Verifique os padrões em vários arquivos em várias pastas que provavelmente estão em uma matriz de pastas.

  2. Mantenha o acompanhamento desse padrão correspondente para realizar outra tarefa, por exemplo: chame .conf para configurar outra coisa.

Enquanto faço essa pergunta, continuo em multitarefas e atualizarei mais tarde, se você tiver uma solução, eu serei muito grato.

    
por Tuyen Pham 28.08.2018 / 16:51

1 resposta

2
files=($^array_of_folders/**/*.pattern(.N)) # assuming pattern files
                                            # have a .pattern extension
pattern="($(cat -- $files | paste -sd '|' -))"
if [[ $1 = $~pattern ]]; then
   print -r -- "$1 matches $pattern"
fi

No entanto, se você quiser saber quais dos padrões correspondem, será necessário:

files=($^array_of_folders/**/*.pattern(.N))
patterns=(${(f)"$(cat -- $files)"})
matching_patterns=()
for pattern ($patterns) {
   [[ $1 = $~pattern ]] && matching_patterns+=$pattern
}
print -r -- "$1 matched by $#matching_patterns patterns: $matching_patterns"
    
por 28.08.2018 / 17:26