Android

Comando Xargs no Linux

Comando xargs - Construir e executar linhas de comando no Linux

Comando xargs - Construir e executar linhas de comando no Linux

Índice:

Anonim

O utilitário xargs permite criar e executar comandos a partir da entrada padrão. Geralmente é usado em combinação com outros comandos através da tubulação.

Com o xargs , você pode fornecer entrada padrão como argumento para utilitários de linha de comando como mkdir e rm .

Neste tutorial, abordaremos o básico do uso do comando xargs .

Como usar o comando xargs Linux

xargs lê argumentos da entrada padrão, separados por espaços em branco ou novas linhas, e executa o comando especificado usando a entrada como argumentos do comando. Se nenhum comando for fornecido, o padrão é /bin/echo .

A sintaxe para o comando xargs é a seguinte:

xargs]

O exemplo mais básico de uso de xargs seria passar várias strings separadas por espaço em branco usando um pipe para xargs e executar um comando que utilizará essas strings como argumentos.

echo "file1 file2 file3" | xargs touch

No exemplo acima, estamos canalizando a entrada padrão para xargs e o comando touch é executado para cada argumento, criando três arquivos. É o mesmo que se você executasse:

touch file1 file2 file3

Como exibir o comando e solicitar ao usuário

Para imprimir o comando no terminal antes de executá-lo, use a opção -t ( --verbose ):

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

Digite y ou Y para confirmar e executar o comando:

touch file1 file2 file3 ?…y

Esta opção é útil ao executar comandos destrutivos.

Como limitar o número de argumentos

Por padrão, o número de argumentos transmitidos para o comando é determinado pelo limite do sistema.

A opção -n ( --max-args ) especifica o número de argumentos a serem passados ​​para o comando fornecido. xargs executa o comando especificado quantas vezes forem necessárias até que todos os argumentos estejam esgotados.

No exemplo a seguir, o número de argumentos lidos a partir da entrada padrão é limitado a 1.

echo "file1 file2 file3" | xargs -n 1 -t touch

Como você pode ver na saída detalhada abaixo, o comando touch é executado separadamente para cada argumento:

touch file1 touch file2 touch file3

Como executar vários comandos

Para executar vários comandos com xargs , use a opção -I . Ele funciona definindo um replace-str após a opção -I e todas as ocorrências do replace-str são substituídas pelo argumento passado para xargs.

O exemplo de xargs seguir executará dois comandos, primeiro criará os arquivos usando o touch e, em seguida, listará os arquivos com o comando ls :

echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'

-rw-r--r-- 1 linuxize users 0 May 6 11:54 file1 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file2 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file3

Uma escolha comum para replace-str é % . No entanto, você pode usar outro espaço reservado, por exemplo, ARGS :

echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

Como especificar um delimitador

Use a opção -d ( --delimiter ) para definir um delimitador personalizado, que pode ser um único caractere ou uma sequência de escape iniciando com \ .

O exemplo a seguir estamos usando ; como delimitador:

echo "file1;file2;file3" | xargs -d ; -t touch

touch file1 file2 file3

Como ler itens do arquivo

O comando xargs também pode ler itens de um arquivo em vez da entrada padrão. Para fazer isso, use a opção -a ( --arg-file ) seguida pelo nome do arquivo.

No exemplo a seguir, o comando xargs lê o arquivo ips.txt e ips.txt ping em cada endereço IP.

ips.txt

8.8.8.8 1.1.1.1

Também estamos usando a opção -L 1 , que instrui os xargs a ler uma linha por vez. Se essa opção for omitida, o xargs passará todos os IPs para um único comando ping .

xargs -t -L 1 -a ips.txt ping -c 1

ping -c 1 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms… ping -c 1 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. 64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms

Usando xargs com find

xargs é usado com mais frequência em combinação com o comando find . Você pode usar o find para procurar arquivos específicos e, em seguida, o xargs para executar operações nesses arquivos.

Para evitar problemas com nomes de arquivos que contenham novas linhas ou outros caracteres especiais, sempre use a opção find -print0 , que faz com que find imprima o nome completo do arquivo seguido por um caractere nulo. Esta saída pode ser corretamente interpretada pelo xargs usando a opção -0 , ( --null ).

No exemplo a seguir, o find imprimirá os nomes completos de todos os arquivos dentro do diretório /var/www/.cache e o xargs passará os caminhos do arquivo para o comando rm :

find /var/www/.cache -type f -print0 | xargs -0 rm -f

Usando xargs para aparar caracteres de espaço em branco

xargs também pode ser usado como uma ferramenta para remover espaços em branco de ambos os lados de uma determinada string. Basta canalizar a string para o comando xargs , e ele fará o corte:

echo " Long line " | xargs

Long line

Isso pode ser útil ao comparar seqüências de caracteres em scripts de shell.

#!/bin/bash VAR1=" Linuxize " VAR2="Linuxize" if]; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if]; then echo "Strings are equal." else echo "Strings are not equal." fi

Strings are not equal. Strings are equal.

Conclusão

xargs é um utilitário de linha de comando no Linux que permite criar e executar comandos.

Para informações mais detalhadas sobre cada opção xargs , leia a página do manual xargs.

terminal xargs