command-line – ¿Cuándo se necesitan los xargs?

Pregunta:

El comando xargs siempre me confunde. ¿Existe una regla general para ello?

Considere los dos ejemplos siguientes:

$ \ls | grep Cases | less

imprime los archivos que coinciden con 'Casos', pero cambiar el comando para touch requerirá xargs :

$ \ls | grep Cases | touch
touch: missing file operand
Try `touch --help' for more information.

$ \ls | grep Cases | xargs touch

Respuesta:

La diferencia está en qué datos acepta el programa de destino.

Si solo usa una tubería, recibe datos en STDIN (el flujo de entrada estándar) como una pila de datos sin procesar que puede clasificar una línea a la vez. Sin embargo, algunos programas no aceptan sus comandos en la entrada estándar, esperan que se especifique en los argumentos del comando. Por ejemplo, touch toma un nombre de archivo como parámetro en la línea de comando así: touch file1.txt .

Si tiene un programa que genera nombres de archivo en la salida estándar y desea usarlos como argumentos para touch , debe usar xargs que lee los datos de flujo STDIN y convierte cada línea en argumentos separados por espacios para el comando.

Estas dos cosas son equivalentes:

# touch file1.txt
# echo file1.txt | xargs touch

No use xargs menos que sepa exactamente qué está haciendo y por qué es necesario. A menudo ocurre que hay una mejor manera de hacer el trabajo que usar xargs para forzar la conversión. El proceso de conversión también está plagado de peligros potenciales como escapar y expandir palabras, etc.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım