Como reduzir o número de execuções com xargs -I

1

O comando find tem duas maneiras de executar algo em um estilo xargs .

find foo -exec bar '{}' baz ';'
find foo -exec bar '{}' baz '+'

A diferença entre eles é que o primeiro executará uma vez por arquivo encontrado e o segundo agrupará os arquivos para reduzir o número de execuções.

Quando olho para xargs , ele tem a opção -I , por exemplo:

xargs -I{} foo bar {} baz

Isso será executado uma vez por arg.

Pergunta: Existe uma maneira de reduzir o número de execuções em xargs , como existe em find ?

Eu quero fazer algo assim:

xargs -I{} echo start {} end << EOF
hello
world
EOF

E obtenha o resultado:

start hello world end

NÃO:

start hello end
start world end
    
por couling 18.05.2017 / 17:29

1 resposta

3

Acho que a única maneira de fazer isso é criar um script de wrapper simples para o seu comando:

#!/bin/sh
echo start "$@" end

então você pode usar xargs echo-wrapper

Claro, você pode fazer isso inline:

xargs sh -c 'echo start "$@" end' sh <<EOF
hello 
world
EOF

Observe que o sh extra no final, que faz parte da sintaxe sh -c , especifica $0 dentro do shell.

    
por 18.05.2017 / 17:53

Tags