xargs可以将输入的内容(通常通过命令行管道传递)转换为后续命令的参数。通常的用法是:命令组合:特别是一些不支持管道输入的命令,比如ls。避免参数过长:xargs可以使用-nx对参数进行分组,避免参数过长。使用语法如下Usage:xargs[OPTION]...COMMANDINITIAL-ARGS...RunCOMMANDwithargumentsINITIAL-ARGSandmoreargumentsreadfrominput.入门示例首先,创建一个测试文件toucha.jsb.jsc.js接下来,运行以下命令:ls*.js|xargsls-al输出如下:-rw-r--r--1awheel0121816:18a.js-rw-r--r--1awheel0121816:18b.js-rw-r--r--1awheel0121816:18c.js命令解释:首先ls*.js的输出是a.jsb.jsc.js。通过管道,a.jsb.jsc.js作为xargs的入参。xargs命令接收到输入的参数后,对参数进行解析,将参数拆分为多个参数,以空格/换行符为分隔符,这里变成a.js、b.js、c.js。xargs把split的参数作为后面命令的参数传递给后面的命令,也就是形成这样一个命令ls-ala.jsb.jsc.js。可以在执行以下命令前加上-t参数打印出命令。ls*.js|的输出xargs-tls-al如下,可以看到多了一行ls-ala.jsb.jsc.js,这才是真正的命令。ls-ala.jsb.jsc.js-rw-r--r--1轮子0121816:18a.js-rw-r--r--1轮子0121816:18b.js-rw-r--r--1awheel0121816:18c.js例子:参数替换有时候,我们需要使用原来的参数,可以通过参数-i或者-来实现我。参数说明如下-IR与--replace=R相同(必须指定R)-i,--replace=[R]将初始参数中的R替换为从标准输入读取的名称。如果R未指定,假设{}示例如下,所有以.js结尾的文件都加上.backup后缀。-I'{}'表示将后面命令行中的{}替换为之前解析的参数。ls*.js|xargs-t-I'{}'mv{}{}.backup展开后命令如下:mva.jsa.js.backupmvb.jsb.js.backupmvc.jsc.js.backupexample:参数分组命令行对参数的最大长度有限制,xargs通过-nx对参数进行分组来解决这个问题。首先,创建4个文件用于实验。toucha.jsb.jsc.jsd.js然后运行以下命令:ls*.js|xargs-t-n2ls-al输出结果如下,-n2表示参数以2为一组传递给后面的命令。ls-ala.jsb.js-rw-r--r--1rootroot0Dec1816:52a.js-rw-r--r--1rootroot0Dec1816:52b.jsls-alc.jsd.js-rw-r--r--1rootroot0Dec1816:52c.js-rw-r--r--1rootroot0Dec1816:52d.js示例:特殊文件名有时,文件名中可能会有特殊字符,例如下面的文件名中有空格。touch'hello01.css''hello02.css'运行命令前会报错,因为xargs使用空格/换行作为分隔符,所以会出现意想不到的行为。#命令查找。-名称'*.css'|xargs-tls-al#Outputls-al./hello01.css./hello02.css#扩展命令ls:cannotaccess./hello:Nosuchfileordirectoryls:cannotaccess01.css:Nosuchfileordirectoryls:cannotaccess./hello:Nosuchfileordirectoryls:cannotaccess02.css:Nosuchfileordirectoryxargs这样解决这个问题。-print0:告诉find命令在输出文件名后跟NULL字符而不是换行符;-0:告诉xargs使用NULL作为参数分隔符;寻找。-name'*.css'-print0|xargs-0-tls-al例子:日志备份将7天前的日志备份到指定目录中find.-时间+7|xargs-I'{}'mv{}/tmp/otc-svr-logs/相关链接https://craftsmanbai.gitbooks...http://wiki.jikexueyuan.com/p...
