xargs ee para os mesmos arquivos [duplicados]

2
    

Esta pergunta já tem uma resposta aqui:

    

Eu quero executar git stripspace em todos os meus arquivos de código-fonte, em cada compilação (ou pré-compromisso ou apenas manualmente), para remover espaço em branco estranho e, mais tarde, talvez formatar o código de maneira padrão

Então, quero fazer algo como

git stripspace < project/code.m > project/code.m

então eu pensei que eu deveria ser capaz de usar find -exec ou xargs mas pela aparência de find não gosta de 'git stripspace' (talvez por causa do espaço intermediário ou do < ou >) e eu não sei como passar o mesmo nome de arquivo, mesmo argumento, duas vezes seguidas com os redirecionamentos apropriados (< >).

    
por Ali 26.07.2013 / 02:30

2 respostas

4

Você está destruindo o arquivo antes de lê-lo. Você precisa usar um arquivo temporário ou um utilitário como sponge de moreutils .

Você não pode usar find -exec ou xargs neste caso. Você precisaria passar um shell para um único argumento contendo os comandos e o nome do arquivo. xargs e find esperam que o marcador de nome de arquivo (que eles substituem com o nome do arquivo) seja um argumento independente. Você pode usar um loop.

Com um arquivo temporário:

find | while read file ; do
    git stripspace < "$file" > tempfile
    mv -f tempfile "$file"
done

com sponge :

find | while read file ; do
    git stripspace < "$file" | sponge "$file"
done
    
por 26.07.2013 / 02:56
0

Você pode usar o Vim no modo Ex:

ex -sc '%!git stripspace' -cx project/code.m
  1. % seleciona todas as linhas

  2. ! comando de execução

  3. x salvar e fechar

por 11.04.2016 / 05:15