Como você atribui {} a uma variável em find --exec

4

Vou perguntar e responder, pois não consegui encontrar a resposta em nenhum lugar.

Eu estava tentando escrever um script que passasse por cada arquivo xml em um diretório e executasse make NAME = onde NM era o nome do arquivo menos o .xml, o lugar onde eu estava preso era atribuir o {} espaço reservado a uma variável. como find . -iname "*.xml" -exec foo=$(echo {}); gmake NAME=$FOO \; não funciona porque nada é atribuído a $ FOO

    
por simotek 19.11.2015 / 05:49

1 resposta

4

Depois de muita pesquisa no IRC, alguém me indicou a seguinte resposta

find . -iname "*.xml" -exec bash -c 'echo "$1"' _ {} \;

ou para o meu exemplo (com o corte da corda removido para evitar confusão)

find . -iname "*.xml" -exec bash -c 'gmake NAME="$1"' _ {} \;

A maneira como isso funciona é que o bash pega os parâmetros depois de -c como argumentos, _ {} é necessário para que o conteúdo de {} seja atribuído a $1 not $0 .

Mais informações podem ser obtidas no link

    
por 19.11.2015 / 05:49