Exemplo Usos do comando "xargs"

Descrición e Introdución

O comando xargs úsase normalmente nunha liña de comandos onde se transmite a saída dun comando como argumentos de entrada a outro comando.

En moitos casos, non se necesita ningún comando especial como os xargs para cumprir iso, xa que os operadores "pipe" e "redirección" realizan a mesma transacción. Non obstante, ás veces hai problemas coa canalización básica e o mecanismo de redirección, por exemplo, se os argumentos conteñen espazos, os xargs superan.

Ademais, xargs executa repetidamente o comando especificado, se é necesario, para procesar todos os argumentos que se lle outorgen. De feito, pode especificar cantos argumentos deben ser lidos da secuencia de entrada estándar cada vez que os xargs executan o comando especificado.

En xeral, o comando xargs debe usarse se a saída dun comando se usa como parte das opcións ou argumentos dun segundo comando ao que se transmiten os datos (usando o operador de canalización "|"). As canalizacións regulares son suficientes se a información pretende ser a entrada (estándar) do segundo comando.

Por exemplo, se usa o comando ls para xerar unha lista de nomes e directorios de ficheiros e, a continuación, colocar esta lista no comando xargs que executa o eco , pode especificar cantos nomes de arquivos ou nomes de directorio son procesados ​​por eco en cada iteración como segue :

ls | xargs -n 5 echo

Neste caso, o eco recibe cinco nomes de arquivos ou directorios por vez. Dado que o eco engade un carácter de liña nova ao final, escríbense cinco nomes en cada liña.

Se executa un comando que devolve un número grande e imprevisible de elementos numéricos (por exemplo, nomes de ficheiro) que se transmiten a outro comando para procesalos, é unha boa idea controlar o máximo número de argumentos que recibe o segundo comando para evitar sobrecarga e fallar.

A seguinte liña de comandos particiona a secuencia de nomes de ficheiros producidos por find int os grupos de 200 antes de pasar ao comando cp , que os copia ao directorio de copia de seguridade .

atopar ./-tipo f -name "* .txt" -print | xargs -l200 -i cp -f {}. /backup

O elemento "./" no comando find especifica o directorio actual para buscar. O argumento "-type f" restrinxe a busca nos ficheiros e a marca "-name" * .txt "filtra aínda máis calquera cousa que non teña unha extensión" .txt ". A marca -i en xargs sinala que a { } notación representa cada nome de ficheiro do vapor.

O seguinte comando atopa ficheiros chamados núcleo dentro ou abaixo do directorio / tmp e elimínaos.

atopar / tmp -name core-type f -print | xargs / bin / rm -f

Teña en conta que isto funcionará incorrectamente se hai algún nome de ficheiro que conteña novas liñas, comiñas simples ou dobres ou espazos. A seguinte versión procesa os nomes dos ficheiros de forma tal que os nomes dos ficheiros ou directorios que conteñan comiñas simples ou dobres, espazos ou liñas novas se xestionan correctamente.

atopar / tmp -name core-type f -print0 | xargs -0 / bin / rm -f

No canto da opción -i tamén pode usar a bandeira -I que especifica a cadea que é substituída pola liña de entrada nos argumentos do comando como neste exemplo:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

A cadea de substitución defínese como "{}". Isto significa que calquera ocorrencia de "{}" nos argumentos de comando substitúese polo elemento de entrada reenviado a args a través da operación de canalización. Isto permítelle colocar os elementos de entrada en posicións específicas nos argumentos do comando a executarse (repetidamente).