As pessoas geralmente fazem isso com tee
:
cmd | sudo tee /long/path/x.{load,conf}
tee
grava cópias de sua entrada em todos os seus arquivos de saída nomeados - e, da mesma forma, o redirecionamento ocorre antes de um exec
, portanto, também gera o argumento na expansão de chaves. Portanto, o acima deve funcionar bem e gravar os dois nomes de arquivos resultantes de uma só vez e o padrão.
Se você preferir não ver o que o tee
escreve em seu terminal, já que ele copia os dados, você pode redirecionar o padrão para /dev/null
- sudo
não irá interferir nesse redirecionamento.
Você deve notar que - como escrito - tee
irá truncar os arquivos de saída antes de escrever para eles. Se você quisesse anexar, você poderia simplesmente adicionar a opção -a
ppend e tee
iria copiar os dados de entrada para a cauda de todos os arquivos de saída nomeados.
Para escrever cada linha para locais separados é um pouco mais difícil admitidamente. Mas sed
oferece o comando w
rite. Combine-o com seu argumento -e
xpression e você poderá escrever todo o script sed
com a expansão de chaves:
cmd | sudo sed -e'$x;/./w '/long/path/x.{load,conf}$'\n1x'
... irá w
ritar a primeira linha para o primeiro arquivo de argumento e a segunda linha para o segundo. As alterações e x
apenas equilibram o script nas primeiras e segundas linhas - para impedir que sed
escreva ambas as linhas nos dois arquivos para cada linha.
Eu testei como:
printf %s\n 1 2 |
sed -e'$x;/./w '/tmp/{1,2}$'\n$!x'
... e depois correu ...
head /tmp/[12]
... que imprimiu ...
==> /tmp/1 <==
1
==> /tmp/2 <==
2