欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

xargs的简单解析

发布时间:2025/3/20 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 xargs的简单解析 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
根据《Linux与unix shell编程指南》第2章对xargs解析如下:xargs的作用是用来回避对命令行长度的限制,它通过使用一个参数多次调用一个命令实现这一功能,而不是一次使用多个参数
。这句话的意思是:xargs永远一次只传给他后面的命令一个参数,然后不停的将所有参数一一传完.
其实这个解析我觉得系错的,等阵再证明“


==============分割线=============
一个简单的应用如下:bash-3.00$ lsa.log  a.txt  b.log  b.txt  c.log  c.txtbash-3.00$ ls | xargs rm                                                         ---------(删除全部文件)bash-3.00$ lsbash-3.00$ 

可以睇出xargs的功能:它将输入 输出给xargs后面的命令,作为那个命令的参数。


上面第3行命令意思就是把ls得到的结果 输出给 后面的命令rm,作为rm的参数.
也就是说,上面的命令执行相当于:rm a.log  a.txt  b.log  b.txt  c.log  c.txt
==============分割线=============下面证明这句话是错的:xargs永远一次只传给他后面的命令一个参数,然后不停的将所有参数一一传完
看如下例子bash-3.00$ ls -ltotal 2-rw-r--r--   1 o475110  u_gtsusr       0 Nov 23 11:10 a-rw-r--r--   1 o475110  u_gtsusr       0 Nov 23 11:11 bdrwxr-xr-x   2 o475110  u_gtsusr     512 Nov 23 11:11 c_folder          (当前目录下有a b两个文件,和c_folder 这个文件夹)bash-3.00$ ls -l c_folder/total 0                                       (c_folder 文件夹是空的)                                                                          bash-3.00$ ls      a         b         c_folder              (ls出来的输出)bash-3.00$ ls |xargs cp            (执行命令)bash-3.00$ ls                          a         b         c_folder              (当前目录没变化)bash-3.00$ ls c_folder/            (把a 和 b copy到了c_folder下)a  bbash-3.00$ 

可以看出:
ls |xargs cp  这个命令 相当于执行了 cp a b c_folder     (把 a b copy 到c_folder),而不是把 a b c_folder这3个参数一次一次地传给cp而是把ls的输出 一次过交给xargs后面的命令cp,作为cp的参数
==============分割线=============那么如何将参数1个1个地传给xargs 后面的命令呢
起始xargs 有1个参数-n-n number       Invokes utility using as many standard inputarguments as possible, up to number (a posi-tive  decimal  integer)  arguments  maximum.Fewer arguments will be used if:
o  The  command  line  length  accumulatedexceeds  the  size  specified by the -soption (or {LINE_MAX} if there is no -soption), or
o  The  last  iteration  has  fewer   thannumber,  but not zero, operands remain-ing.
能指定每一次指定多少个参数给xargs后面的命令:

例子:bash-3.00$ ls                                                                #当前目录下有a b c d 4个文件夹                                               a  b  c  dbash-3.00$ ls | xargs echo                                           #默认不带参数的话, 管线前面的参数是一次过传给echo的a b c dbash-3.00$ ls | xargs -n 1 echo                                    #这次逐个传给echo了。 所以echo 了4次, 有4行abcdbash-3.00$ ls | xargs -n 2 echo                                    #每次传2个参数给echo , echo 了 2次。a bc dbash-3.00$ 

==============分割线=============这里介绍另1个很有用的参数i-i[replstr]     This option is equivalent to -I replstr. Thestring  {}  is  assumed  for  replstr if theoption-argument is omitted
意思是 xargs 加上 -i 参数后, 能用{} 代表管线前面的输出。接上面的例子:例如我想cp a b c d 到另1个文件夹../e
如果用ls | xargs cp -r ../e 是不行的因为相当于执行了 cp -r ../e a b c d ...      #吧 ../e a b c 这个4个文件copy 到 d
用 ls | xargs -i  cp {} ../e  就ok了因为{} 就代表了前面ls的输出, 就是a b c d 了啊~

总结

以上是生活随笔为你收集整理的xargs的简单解析的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。