From FreeBSDwiki
Jump to: navigation, search

xargs is a command useful for acting upon the output of an earlier command; for instance, you could pipe the output of the find command to xargs rm to recursively delete all .tmp files below the current directory:

server# find . -name "*.tmp" | xargs rm

from the manpage:

    The xargs utility reads space, tab, newline and end-of-file delimited
    strings from the standard input and executes utility with the strings as
    Any arguments specified on the command line are given to utility upon
    each invocation, followed by some number of the arguments read from the
    standard input of xargs.  The utility is repeatedly executed until stan-
    dard input is exhausted.

When you need a more complex usage, the -J argument specifies a "replacement string" to allow you to insert the output of the last command into the new one in an arbitary location. For example, say you wanted to move all files that contained a certain string into a different folder:

server# grep -rv "I should be in newfolder!" oldfolder | xargs -J% mv oldfolder/% newfolder/

Hint: If your file names may contain spaces then be sure to use the -0 (zero) option:

server# find . -name "*.tmp" -print0 | xargs -0 rm
Personal tools