首页 > 代码库 > stdin的数据中接收处理工具——xargs
stdin的数据中接收处理工具——xargs
前些天在帮助朋友的服务器上修改了一些脚本,而后来他问我在脚本中xargs是什么,因此在这里就简单的说一说xargs。
在实际生产环境中,往往只用一种指令去处理数据,一般都是不够的,那要使我们能更为高效的处理数据就要使用到管道(|),利用管道把几种指令拼接起来,以用来更好、更高效的处理数据,而管道的实现方式是把上一个指令的stdout的数据放到下一个指令的stdin的数据中,但是在系统中有一些指令,如:rm、ls、cp、mv等等这些指令是不会接收来自stdin的数据,那我们就无法把rm、ls、cp、mv等等这些指令使用管道连接起来,那么如果要使用就要用到xargs。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。当然还有具体的参数选项可以查看man帮助文档,在这里就简单的举一个例子:
[root@localhost ~]# ls |xargs rm -rf #通过管道和xargs把ls和rm非管道指令拼接起来,意思是删除当前目录下的所有文件,要注意的是这条指令一定不能再/下执行 [root@localhost test]# ls test2 test.bz2 [root@localhost test]# [root@localhost test]# find /data/test/ -type f -name "*.bz2" -print /data/test/test2/test.bz2 /data/test/test.bz2 [root@localhost test]# find /data/test/ -type f -name "*.bz2" -print |xargs rm -rvf 已删除“/data/test/test2/test.bz2” 已删除“/data/test/test.bz2” #这样通过xargs把find出的结果传递给rm,当然find本身也是有exec的参数选项的,所以以上也可以写成: [root@localhost test]# find /data/test/ -type f -name "*.bz2" -exec rm -rvf {} \; 已删除“/data/test/test2/test.bz2” 已删除“/data/test/test.bz2”
当然很多非管道指令可以通过xargs接收来自stdin的数据的指令还有很多,在次就不一一列举了,总之xargs往往都是伴随着管道使用的重要指令。
本文出自 “技术随笔” 博客,请务必保留此出处http://jim123.blog.51cto.com/4763600/1874781
stdin的数据中接收处理工具——xargs
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。