Existem comandos Linux e existe o xargs

O poder e a versatilidade do comando xargs



Gosto muito da praticidade do terminal. Para alguns, um pavor; para outros uma obrigação. No meio disso, existem comandos que aumentam bastante nossa produtividade e que você não deveria refutar isso.

Entre diversos deles, destaco o comando xargs, um comando capaz de aumentar sua produtividade.

Contextualizando

Todos os utilitários padrões do Linux possuem 3 fluxos de dados associados a eles:

  • 1. fluxo de entrada padrão (stdin),
  • 2. fluxo de saída padrão (stdout),
  • 3. fluxo de erro padrão (stderr)

Esses fluxos estão todos em modo texto. Enviamos input (stdin) para um comando usando texto, e a resposta (stdout) é escrita na janela do terminal como texto. Mensagens de erro também são exibidas no terminal como texto (stderr).

Um dos grandes recursos dos sistemas Linux e Unix é a habilidade de canalizar a saída padrão stdout de um comando para a entrada stdin de um segundo comando \o/ Assim, o primeiro comando não difere se sua saída não estar indo para um texto num terminal; e o segundo comando não distingue que sua entrada não esteja vindo de um teclado.

Embora todos os comandos do Linux tenham os três fluxos padrão, nem todos aceitam o stdout de outro comando como entrada para sua entrada padrão. Isso significa que você não pode canalizar a entrada para eles. Daí o comando xargs entra na jogada :)

O comando xargs

O comando xargs é um comando para construir pipelines de execução usando os fluxos de dados padrão. O xargs aceitará entrada canalizada.

Ele tem função primeira receber uma entrada de uma lista de parâmetros de outro comando e passá-la para a execução de outro comando – isso tudo numa única sentença, através do uso do pipeline (|). Parece complexo, né?

Em resumo, o xargs pode pegar a saída de um comando e enviá-lo para outro como parâmetros ! :)

 $_ comando | xargs [opções] [comando] [lista_parâmetros comando anterior]

Exemplos

Como caso prático, mostro a leitura de arquivo de texto:

$ cat /home/ricardo/lista.txt

arquivo_1  
arquivo_2  
arquivo_3  
arquivo_4

E se canalizarmos a saída do comando anterior através do comando xargs e pipeline (|)? Uma lista é exibida na janela do terminal:

$ cat /home/ricardo/lista.txt | xargs

arquivo_1 arquivo_2 arquivo_3 arquivo_4

Assim, esse recurso permite que o xargs receba essa lista como parâmetros para outro(s) comando(s). Por exemplo: touch.

$ cat /home/ricardo/lista.txt | xargs touch

Esse último comando se divide assim:

  • – cat directories.txt | : Isso envia o conteúdo do arquivo lista.txt (todos os nomes de arquivos) para o xargs.
  • – xargs touch: cria (touch) todos os arquivos baseado na lista de parâmetros recebida do comando cat.

Por fim, dado a criação dos arquivos listados no arquivo, podemos usar a mesma estrutura para removê-los, simultaneamente, usando o comando rm:

$ cat /home/ricardo/lista.txt | xargs rm

Considerações

Diante do exposto, você percebe que essa canalização da entrada de dados de outro comando para o xargs pode aumentar sua produtividade, pois você evita repetições ou uso de scripts “complexos” para capturar saídas de outros comandos para, posteriormente, manipulá-los em outras estruturas de dados – numa única sentença você faz trabalhos simultâneos mais rapidamente.

É claro que o uso de recursos de shell script podem aumentar o nível de granularidade da lista de parâmetros canalizadas pelo xargs. Por exemplo:

$ ls -l | grep ” algo ” | cut -c55- | xargs rm

Onde, o grep selecionou os arquivos que continham a cadeia “algo” no diretório corrente listado pelo ls -l. O comando cut pegou somente o nome dos arquivos, passando-os para a remoção pelo rm usando o comando xargs como sequencia.

Então, o poder e a versatilidade do xargs se torna cada vez mais marcante!


Via | Dicas-l | HowToGeek

Gostou do conteúdo?

Olá! Quem escreve aqui é o Ricardo Ferreira, um desenvolvedor web independente, administrador de sistemas Linux e solucionador de problemas nato. Mirando a ciência de dados!

Procurando ajuda? Estou disponível para ser contratado como consultor ou freelancer. Quer entrar em contato? Dá uma olhada na minha página de contato. Abraços!

Ah... quase esquecendo, aceito um café

Contribua

Alguma contribuição, crítica ou problema encontrado? Reporte aqui! Basta alterar o arquivo de texto, diretamente no Github e abrir um pull-request!