Sodamhan.com

TL;DR

xargs

Execute a command with piped arguments coming from another command, a file, etc. The input is treated as a single block of text and split into separate pieces on spaces, tabs, newlines and end-of-file. More information: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/xargs.html.

  • Run a command using the input data as arguments:

arguments_source | xargs command

  • Run multiple chained commands on the input data:

arguments_source | xargs sh -c "command1 && command2 | command3"

  • Gzip all files with .log extension taking advantage of multiple threads (-print0 uses a null character to split file names, and -0 uses it as delimiter):

find . -name '*.log' -print0 | xargs -0 -P 4 -n 1 gzip

  • Execute the command once per argument:

arguments_source | xargs -n1 command

  • Execute the command once for each input line, replacing any occurrences of the placeholder (here marked as _) with the input line:

arguments_source | xargs -I _ command _ optional_extra_arguments

  • Parallel runs of up to max-procs processes at a time; the default is 1. If max-procs is 0, xargs will run as many processes as possible at a time:

arguments_source | xargs -P max-procs command

This document was created using the contents of the tldr project.