Description: xargs
is used to pass arguments to other commands and is an essential component for building one-liner commands.
Syntax:xargs [OPTIONS] [COMMAND]
Overview:xargs
takes input from stdin, separated by spaces or newline characters, and passes it as space-separated arguments to other commands. However, be careful when filenames or strings contain spaces, as xargs
may misinterpret them.
Options:
-0, --null
: Default option. If stdin contains special characters like backticks (), backslashes (\), or spaces,
xargs` restores them to regular characters.-a, --arg-file=FILE
: Reads input from the specified file instead of stdin.-d, --delimiter=DEL
: Specifies the delimiter to separate input. By default,xargs
uses spaces and newlines, outputting arguments separated by spaces.-E EOF_STR
: Sets an end-of-input string. If none is specified, input has no terminator. EOF_STR must be a separate field (i.e., space or newline separated).-e, --eof[=EOF_STR]
: Same as-E
, but non-POSIX compliant. Use-E
if available.-I REPLACE_STR
: Assigns each argument to the specified placeholder (e.g.,{}
,$
,@
). Useful for positioning arguments when there are multiple parameters. For example:find . -name "*.txt" | xargs -I {} cp {} /tmp/{}.bak
-i, --replace[=REPLACE_STR]
: Same as-I
, butREPLACE_STR
is optional and defaults to{}
. Use-I
for POSIX compliance.-L MAX_LINES
: Limits the number of input lines per execution, implying the-x
option.-l, --max-lines[=MAX_LINES]
: Same as-L
. Defaults to 1 line. Use-L
for POSIX compliance.-n, --max-args=MAX_ARGS
: Specifies the maximum number of arguments to pass to the command at once.-o, --open-tty
: Reopens stdin to/dev/TTY
before running the command in a subprocess, useful for interactive applications.-P, --max-procs=MAX_PROCS
: Sets the maximum number of parallel processes. Default is 1. Use with-n
or-L
for batch processing.-p, --interactive
: Prompts the user for confirmation before executing each command.--process-slot-var=NAME
: Sets an environment variable with a unique value for each running subprocess. Once a process finishes, the value is reused.-r, --no-run-if-empty
: Stopsxargs
from running if there is no input. This is the default behavior.-s, --max-chars=MAX_CHARS
: Limits the maximum number of characters (including command, spaces, and newlines) in the command.--show-limits
: Displays the system’s command-line length limitations.-t, --verbose
: Prints the command to stderr before executing it.-x, --exit
: Exits if the command line exceeds the specified character limit (-s
).--help
: Displays help information.--version
: Displays version information.
Parameters:
COMMAND
: The command string to execute.
Examples:
Example 1
Some commands don’t accept piped arguments directly. Use xargs
to pass them:
# Incorrect: `ls` cannot accept piped input directly
find /sbin -perm +700 | ls -l
# Correct: use `xargs` to pass arguments to `ls`
find /sbin -perm +700 | xargs ls -l
Example 2
Show system command-line length limitations:
$ xargs --show-limits
Example 3
Restore shell special characters like backticks:
$ echo '`0123`4 56789' | xargs -t echo
Example 4
Set the delimiter for reading input as a comma:
$ echo 01234 , 56789 | xargs -E ","
Example 5
Solve “argument list too long” errors when working with many files:
# Add a suffix to all files in the current directory
ls | xargs -t -i mv {} {}.bak
Example 6
Set how many lines to pass as arguments at a time:
$ echo -e "01234\n56789\n01234" | xargs -t -L 2 echo
Example 7
Merge multi-line input into a single line:
$ cat test.txt | xargs
Example 8
Kill processes in combination with ps
, grep
, awk
, and kill
:
$ ps -ef | grep spp | awk '{printf "%s ",$2}' | xargs kill -9