usando o conteúdo do arquivo modificado como argumentos

3

Em um script, eu gostaria de limpar um repositório mercurial, mas ser capaz de reter vários padrões de arquivo (configuráveis) que li em $ FILENAME. A sintaxe do comando hg é

hg purge --all --exclude PATTERN1 --exclude PATTERN2 ...

Assim, se $ FILENAME contiver uma lista de padrões de arquivo (um padrão por linha), cada padrão deverá ser prefixado por um "--exclude" para construir a linha de comando

Minha abordagem atual é usar para construção da lista de argumentos
grep -v -E "^[[:blank:]]*$" $FILENAME | sed "s/^/--exclude /g" | xargs echo
que também irá omitir as linhas vazias e aquelas que contêm apenas tabulações ou espaços que resultariam em um erro se usado para construir a linha de comando acima. Assim, no total:

hg purge --all 'grep -v -E "^[[:blank:]]*$" $FILENAME | sed "s/^/--exclude /g" | xargs echo'

Existe uma maneira mais agradável, talvez com alguns argumentos xargs que eu desconheço?

    
por planetmaker 23.09.2014 / 15:08

2 respostas

6

Parece que existe uma forma abreviada no próprio mercurial, fazendo uso de listas de arquivos (sugerido por mg em #mercurial):
hg purge --all --exclude "listfile:$FILENAME"

    
por 23.09.2014 / 15:53
4

Não entendo por que você está usando grep e xargs . Dado um arquivo de padrões como este:

foo
bar
baz

Você pode correr

$ echo hg purge --all $(perl -pe 's/^/--exclude /' file)
hg purge --all --exclude foo --exclude bar --exclude baz

Ou até mesmo

$ echo hg purge --all $(sed 's/^/--exclude /' file)
hg purge --all --exclude foo --exclude bar --exclude baz

Basta remover o echo para executar os comandos.

    
por 23.09.2014 / 15:29