Usando git diff com xargs -0, espaços em nomes de arquivos

0

O que estou tentando fazer é extrair uma lista de 'projetos' que foram alterados desde um determinado commit. Para isso estou aproximando um projeto para uma pasta contendo um arquivo alterado.

O problema que estou tendo é fazer com que isso funcione com arquivos que possuem espaços em seus nomes:

$ git diff --name-only TREEISH.. | xargs -n 1 dirname

Eu olhei para a opção -0 para xargs e a opção -z para diff , mas isso me dá:

$ git diff --name-only -z TREEISH.. | xargs -0 dirname
dirname: too many arguments

O que estou perdendo?

    
por Benjol 12.12.2012 / 10:38

1 resposta

1

Tente isto:

git diff --name-only -z TREEISH.. | while IFS= read -r n; do dirname "$n"; done 
  • O IFS é o separador de campos de entrada, necessário para evitar o corte de espaço em branco inicial / final
  • -r é necessário para evitar o processamento de barra invertida.
  • As aspas em torno de "$ n" fazem com que ele lide com espaços.

Veja aqui para mais informações.

    
por 12.12.2012 / 14:07

Tags