xargs

man xargs可以看出:
xargs从标准输入中读取数据,并以空白和换行符分割每个参数(引号中的空白不作为分割符)。然后执行指定的命令(并把分解后的参数附加到命令后面)。如果没有指定具体的命令,默认使用/bin/echo命令。
如果没有特别指定,xargs会把`_'当作结束标志。
综上所述,xargs不适合用作文本处理,特别是重要的数据处理。

举例说明(供参考):

r2007@www r2007 $ cat a

it's me!

over

r2007@www r2007 $ xargs <a

xargs: unmatched single quote

r2007@www r2007 $ cat a

arg1 arg2 _ arg3

foo bar

r2007@www r2007 $ xargs <a

arg1 arg2

r2007@www r2007 $ cat a

/n: new line

/t: tab

r2007@www r2007 $ xargs <a

n: new line t: tab
xargs用法
今天看书,讲到将一个命令的输出结果放到另一个变量中,可以通过:
 
 
# x=$(echo $(ls -l))或者x=`echo $(ls -l)`
# echo $x
  这种把命令的执行结果放到变量中的能力是很强大的,它使得在脚本程序中使用现有命令并捕获其输出的工作变得很容易。如果需要把一条命令在标准输出上的输出结果,转换为另一个程序或或者另一个命令的参数,可以用xargs命令。
# man xargs
可以看到例子:
 
  1、 find /tmp -name core -type f -print | xargs /bin/rm -f
  用find命令在tmp目录下查找以core命名的文件,然后删除它们。需要注意的是如果文件名字包含新行或者空格的话,这条命令将会被错误操作。
  
  2、find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
    这条命令就正确地处理了新行和空格,有可能带来的错误。
    这条命令和上一条意思一样。
  
  3、cut -d: -f1 < /etc/passwd | sort | xargs echo
     大概列举了系统的用户。
 
  4、find ./ -type f -print | xargs -i mv -f {} ./newdir
     -i 表示 find 传递给xargs的结果 由{}来代替
 
   管道是把一个命令的输出传递给另一个命令作为输入,比如:
command1 | command2
    但是command2仅仅把输出的内容作为输入参数。
    find . -name "install.log" -print打印出的是install.log这个字符串,如果仅仅使用管道,那么command2能够使用的仅仅是install.log这个字符串,不能把它当作文件来进行处理。当然这个command2除了xargs。xargs就是为了能够对find搜索到的文件进行操作而编写的。它能把管道传来的字符串当作文件交给其后的命令执行。
举个例子:
(1)$find . -name "install.log" -print | cat
./install.log   #显示从管道传来的内容,仅仅作为字符串来处理
(2)$find . -name "install.log" -print | xargs cat
aaaaaa        #将管道传来的内容作为文件,交给cat执行。也就是说,该命令执行的是如果存在install.log,那么就打印出这个文件的内容。

   通过这个例子,应该很容易理解这样有什么不同了。当你要对匹配文件操作时,使用find and xargs。其实这都是运用了管道。xargs是shell命令的一个,可以把管道输入的内容转化为其参数要操作的文件。

xargs详解,本文系转载,有一定的参考作用,具体请man xargs


Linux Shell真的是一个比较好玩的东西,以前也会经常写一些,不过都是些简单的东西,或者称之为批处理,估计也只能叫批处理,只是一些简单的命令的堆积。:)。


今天稍微看了一下xargs,一个简单的示例应用如下:
[root@TestServer haha]#ls
a.class b.class c.class
a.java b.java c.java
[root@TestServer haha]#ls |xargs rm
[root@TestServer haha]#ls
[root@TestServer haha]#


呵呵,虽然有点避简就烦,但是能说明了xargs的功能:它将输入输出给xargs后面的命令,作为那个命令的参数。


也就是说,上面的命令执行相当于:
rm a.class b.class c.class a.java b.java c.java


xargs将前面的ls的结果交给了xargs后面的rm命令,作为rm命令的参数。它真正的含义可以用xargs自己来解释:


[root@TestServer haha]# cat a
first line
second line
[root@TestServer haha]# cat a |xargs
first line second line
[root@TestServer haha]# cat a |xargs –verbose
/bin/echo first line second line
first line second line third line
[root@TestServer haha]# cat a |xargs –verbose –max-args=1
/bin/echo first
first
/bin/echo line
line
/bin/echo second
second
/bin/echo line
line

 

转自 http://sysop.blogbus.com/logs/41989317.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值