xargs Command in Linux

This tutorial explains Linux “xargs” command, options and its usage with examples.

xargs – build and execute command lines from standard input

Description :

xargs reads arguments from the standard input, delimited by blanks (which can be protected with double or single quotes or a backslash) or newlines, and executes the command (default is /bin/echo) one or more times with any initial-arguments followed by arguments read from standard input. Blank lines on the standard input are ignored. xargs exits with the following status:
0 if it succeeds
123 if any invocation of the command exited with status 1-125
124 if the command exited with status 255
125 if the command is killed by a signal
126 if the command cannot be run
127 if the command is not found
1 if some other error occurred.

Usage :

xargs [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]] [-n max-args] [-s max-chars] [-P max-procs] [–null] [–eof[=eof-str]] [–replace[=replace-str]] [–max-lines[=max-lines]] [–interactive] [–max-chars=max-chars] [–verbose] [–exit] [–max-procs=max-procs] [–max-args=max-args] [–no-run-if-empty] [–version] [–help] [command [initial-arguments]]

Options :

advertisement
advertisement

–null, -0
Input filenames are terminated by a null character instead of by whitespace, and the quotes and backslash are not special (every character is taken literally). Disables the end of file string, which is treated like any other argument. Useful when arguments might contain white space, quote marks, or backslashes. The GNU find -print0 option produces input suitable for this mode.
–eof[=eof-str], -e[eof-str]
Set the end of file string to eof-str. If the end of file string occurs as a line of input, the rest of the input is ignored. If eof-str is omitted, there is no end of file string. If this option is not given, the end of file string defaults to “_”.
–help
Print a summary of the options to xargs and exit.
–replace[=replace-str], -i[replace-str]
Replace occurences of replace-str in the initial arguments with names read from standard input. Also, unquoted blanks do not terminate arguments. If replace-str is omitted, it defaults to “{}” (like for `find -exec’). Implies -x and -l 1.
–max-lines[=max-lines], -l[max-lines]
Use at most max-lines nonblank input lines per command line; max-lines defaults to 1 if omitted. Trailing blanks cause an input line to be logically continued on the next input line. Implies -x.
–max-args=max-args, -n max-args
Use at most max-args arguments per command line. Fewer than max-args arguments will be used if the size (see the -s option) is exceeded, unless the -x option is given, in which case xargs will exit.
–interactive, -p
Prompt the user about whether to run each command line and read a line from the terminal. Only run the command line if the response starts with `y’ or `Y’. Implies -t.
–no-run-if-empty, -r
If the standard input does not contain any nonblanks, do not run the command. Normally, the command is run once even if there is no input.
–max-chars=max-chars, -s max-chars
Use at most max-chars characters per command line, including the command and initial arguments and the terminating nulls at the ends of the argument strings. The default is as large as possible, up to 20k characters.
–verbose, -t
Print the command line on the standard error output before executing it.
–version
Print the version number of xargs and exit.
–exit, -x
Exit if the size (see the -s option) is exceeded.
–max-procs=max-procs, -P max-procs
Run 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. Use the -n option with -P; otherwise chances are that only one exec will be done.

Examples :

1. When you type xargs without any argument, it will prompt you to enter the input through stdin:

$ xargs
Hi,
Welcome to TGS.

After you type something, press ctrl+d, which will echo the string back to you on stdout as shown below.

Note: Join free Sanfoundry classes at Telegram or Youtube
$ xargs
Hi,
Welcome to TGS.Hi, Welcome to TGS.

2. Specify Delimiter Using -d option

In the following example, when you use the -d\n, it will preserve newline delimiter in the output, and display the output exactly as it was typed.

$ xargs -d\n
Hi,
Welcome to TGS.

After you type the above, press ctrl+d, which will echo the string back to you on stdout as shown below. But, this time it will preserve the newline.

advertisement
$ xargs -d\n
Hi,
Welcome to TGS.Hi, 
Welcome to TGS.

3. Limit Output Per Line Using -n Option

xargs displays whatever comes to its stdin as shown below.

$ echo a b c d e f| xargs
a b c d e f

But, the output of the xargs command can be split into multiple lines using -n option.

advertisement

In the following example, we used -n 3, which will display only 3 items per line in the xargs output.

$ echo a b c d e f| xargs -n 3
a b c
d e f

4. Prompt User Before Execution using -p option

Using option -p, you can confirm the execution of the xargs command from the user.

Considering the previous example, if we want to confirm each execution of the /bin/echo command by the user, use the -p option along with -n option as shown below.

$ echo a b c d e f| xargs -p -n 3
/bin/echo a b c ?...y
/bin/echo d e f ?...a b c
y
d e f

5. Avoid Default /bin/echo for Blank Input Using -r Option

When there is a blank input (i.e no input was given to xargs command), it will execute a /bin/echo command which will display a new line as shown below.

$ xargs -p

Press ctrl-d after typing “xargs -p”, which will indicate that it executed a /bin/echo as shown below.

$ xargs -p
                      /bin/echo ?...y
 
$

6. Print the Command Along with Output Using -t Option

In the following example, type “abcdef” as the input for the xargs -t command.

$ xargs -t
abcdef

Press ctrl-d to complete the above xargs -t command, which will display the command that xargs really executes before displaying the output. In this case, the command that xargs executes is “/bin/echo abcdef”, which is displayed here.

$ xargs -t
abcdef
/bin/echo abcdef
abcdef

7. Delete Files using find command and xargs

$ ls
one.c  one.h  two.c  two.h
 
$ find . -name "*.c" | xargs rm -rf
 
$ ls
one.h  two.h

8. Display System Limits on xargs using –show-limits option

$ xargs --show-limits
Your environment variables take up 2887 bytes
POSIX upper limit on argument length (this system): 2092217
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2089330
Size of command buffer we are actually using: 131072
 
Execution of xargs will continue now, and it will try to read its input and run commands; if this is not what you wanted to happen, please type the end-of-file keystroke.
Warning: /bin/echo will be run at least once.  If you do not want that to happen, then press the interrupt keystroke.

9. Combine Xargs with Grep command

In the following example, find command provided all the .c files as input to xargs.

The xargs command executes the grep command to find all the files (among the files provided by find command) that contained a string ‘stdlib.h’.

$ find . -name '*.c' | xargs grep 'stdlib.h'
./tgsthreads.c:#include
./valgrind.c:#include
./direntry.c:#include
./xvirus.c:#include
./temp.c:#include
...
...
...

9. Dealing file names with blank spaces and newline

To find out all *.c file located in 100s of subdirectories, where names may have whitespaces as well as newlines and move them to another directory called ~/old.src, use:

$ find /path/to/dir -iname "*.c" -print0 | xargs -0 -I file mv file ~/old.src

Sanfoundry Global Education & Learning Series – 1000 Linux Tutorials.

If you wish to look at all Linux commands and their usage examples, go to Linux Commands Tutorial.

If you find any mistake above, kindly email to [email protected]

advertisement
advertisement
Subscribe to our Newsletters (Subject-wise). Participate in the Sanfoundry Certification contest to get free Certificate of Merit. Join our social networks below and stay updated with latest contests, videos, internships and jobs!

Youtube | Telegram | LinkedIn | Instagram | Facebook | Twitter | Pinterest
Manish Bhojasia - Founder & CTO at Sanfoundry
Manish Bhojasia, a technology veteran with 20+ years @ Cisco & Wipro, is Founder and CTO at Sanfoundry. He lives in Bangalore, and focuses on development of Linux Kernel, SAN Technologies, Advanced C, Data Structures & Alogrithms. Stay connected with him at LinkedIn.

Subscribe to his free Masterclasses at Youtube & discussions at Telegram SanfoundryClasses.