Xargs
From FreeBSDwiki
(Difference between revisions)
(Add -0 option example) |
|||
Line 16: | Line 16: | ||
server# '''grep -rv "I should be in newfolder!" oldfolder | xargs -J% mv oldfolder/% newfolder/''' | 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''' | ||
[[Category:System Commands]] | [[Category:System Commands]] |
Revision as of 11:38, 19 June 2008
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 arguments.
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