博客
关于我
shell之xargs与-exec与管道的区别你造吗?
阅读量:665 次
发布时间:2019-03-15

本文共 1051 字,大约阅读时间需要 3 分钟。

xargs的作用

(1)将前一个命令的标准输出传递给下一个命令,作为它的参数,xargs默认命令是echo,空格是默认定界符
(2)将多行输入转换为单行

使用模式

front command | xargs -option latercommand
front command:前一个命令

  • option:xargs的选项
    later command:后一个命令
    一般与管道“|”结合使用

xargs常用选项

-n:指定一次处理的参数个数
-d:自定义参数界定符
-p:询问是否运行later command参数
-t:表示先打印命令,然后再执行
-i:逐项处理
...更多参数查看man xargs

xargs与管道|的区别

管道“|”用来将前一个命令的标准输出传递到下一个命令的标准输入。
xargs将前一个命令的标准输出传递给下一个命令,作为它的参数。
个人理解,命令参数就是直接跟在命令后面的,而标准输入可以是键盘、文件等。
管道传递的是输入框中的内容,而xargs是直接将结果传递给命令作为参数。
因此,加上xargs后,管道前面的结果会直接传递给后面的命令作为参数。

xargs与-exec的区别

-exec:{}表示命令的参数即为所找到的文件,以;表示命令的结束,\用于限定分号作为命令结束符。
-ok:类似于-exec,只是更安全,不会直接执行参数。

xargs将参数一次传递给echo,执行:echo begin ./xargs.txt ./args.txt

find . -name '*.txt' -type f | xargs echo begin

exec一次传递一个参数,执行:echo begin ./xargs.txt;echo begin ./args.txt

find . -name '*.txt' -type f -exec echo begin {} ;

xargs需要结合管道使用,格式为:find [option] expression |xargs command

exec每处理一个文件都要启动命令,效率低,且需要使用{}和;
对于空格文件名,find | xargs会有问题,而exec不会有这个问题。

总结:

  • exec效率低,每处理一个文件都要启动命令
  • exec麻烦,需要用{}和;
  • xargs不支持空格文件名
  • exec支持空格文件名
  • xargs一次处理多个文件较方便
    各选适合:如果需要一次处理多个文件且文件名无空格,选xargs;否则选exec。
  • 转载地址:http://ybxmz.baihongyu.com/

    你可能感兴趣的文章
    php基础篇-二维数组排序 array_multisort
    查看>>
    php基础配置环境变量
    查看>>
    php增删改查封装方法
    查看>>
    springboot之jar包Linux后台启动部署及滚动日志查看且日志输出至文件保存(超级详细)
    查看>>
    php多条件筛选功能的实现
    查看>>
    php多线程
    查看>>
    PHP大数组循环-避免产生Notice或者是Warning
    查看>>
    PHP大数组过滤元素、修改元素性能分析
    查看>>
    PHP大文件切片下载代码
    查看>>
    PHP如何下载远程文件到指定目录
    查看>>
    php如何优化压缩的图片
    查看>>
    php如何做表格,新手怎么制作表格
    查看>>
    RabbitMQ高级特性
    查看>>
    php如何定义的数位置,php如何实现不借助IDE快速定位行数或者方法定义的文件和位置...
    查看>>
    RabbitMQ集群 - 普通集群搭建、宕机情况
    查看>>
    php如何正确的获得文件的后缀名
    查看>>
    PHP如何生成唯一的数字ID
    查看>>
    PHP如何获取当前页面的最后修改时间
    查看>>
    PHP如何读取json数据
    查看>>
    PHP字符串
    查看>>