Sintaxe da shell para redirecionar argumentos?

3

Se eu quiser redirecionar não o stdio mas como argumentos a saída de um programa, devo usar xargs?

Por exemplo, eu faço ls e quero que os nomes de arquivos sejam argumentos para o próximo comando em vez de um fluxo de entrada.

Existe um bom exemplo do que estou falando? Este exemplo é superficial, mas ilustra o que quero dizer: use a saída de ls como argumentos para cat para exibir o conteúdo dos arquivos.

    
por Niklas Rosencrantz 28.05.2016 / 03:36

1 resposta

3

Primeiro, faça não analisar ls . Existem muitas formas confiáveis de obter nomes de arquivos, mas ls não é um deles .

O seguinte usa o globbing do shell para gerar nomes de arquivos e passa uma lista nula separada deles para xargs , que os executa através de cat :

printf '%s
cat *
' * | xargs -0 cat

Eu entendo que o objetivo disso foi demonstrar arquivos- > xargs. Caso contrário, é claro, a menos que haja arquivos demais para caber em uma linha de comando, os itens acima podem ser substituídos por:

find . -maxdepth 1 -type f -print0 | xargs -0 cat

Sendo mais seletivo

Tanto ls como printf '%sfind' * exibirão todo o conteúdo de um diretório, incluindo seus subdiretórios. Se você quiser ser mais seletivo, digamos, incluindo arquivos regulares, mas não subdiretórios, como sugere cas, find é uma ferramenta melhor:

find . -maxdepth 1 -type f -exec cat {} +

Ou:

printf '%s
cat *
' * | xargs -0 cat

man find tem muitas opções úteis. Veja %code% para detalhes.

    
por 28.05.2016 / 03:46