博客
关于我
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/

    你可能感兴趣的文章
    oracle 使用leading, use_nl, rownum调优
    查看>>
    oracle 修改字段类型方法
    查看>>
    Oracle 修改数据库表数据提交之后进行回滚
    查看>>
    UML-总结
    查看>>
    oracle 内存参数示意图
    查看>>
    Oracle 写存储过程的一个模板还有一些基本的知识点
    查看>>
    UML- 配置图(部署图)
    查看>>
    oracle 切割字符串加引号_使用Clean() 去掉由函数自动生成的字符串中的双引号...
    查看>>
    Oracle 创建 DBLink 的方法
    查看>>
    oracle 创建job
    查看>>
    oracle 创建一个用户,只能访问指定的对象
    查看>>
    oracle 创建双向备份,Materialized View 物化视图实现 Oracle 表双向同步
    查看>>
    oracle 创建字段自增长——两种实现方式汇总
    查看>>
    Oracle 升级10.2.0.5.4 OPatch 报错Patch 12419392 Optional component(s) missing 解决方法
    查看>>
    oracle 去重
    查看>>
    oracle 可传输的表空间:rman
    查看>>
    Oracle 启动监听命令
    查看>>
    Oracle 启动阶段 OPEN
    查看>>
    Oracle 在Drop表时的Cascade Constraints
    查看>>
    Oracle 在Sqlplus 执行sql脚本文件。
    查看>>