平时使用find命令查找出文件的时候有时候后面有时候用-exec有时候用管道加xargs,这2个到底有什么不同?下面就这2个的不同做简单介绍。

零、实验环境

[root@osker /]# find /root/ -type f -name '*.txt'
/root/.txt
/root/.txt
/root/.tx

一、xargs的使用

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

[root@osker /]# find /root/ -type f -name '*.txt'|xargs
/root/.txt /root/.txt /root/.txt
[root@osker /]# find /root/ -type f -name '*.txt'|xargs echo start
start /root/.txt /root/.txt /root/.txt
###-i:逐项处理,默认以空格为分隔符;{}表示前面传过来的结果。
[root@osker /]# find /root/ -type f -name '*.txt'|xargs -i mv {} {}.bak
[root@osker /]# ll /root/
total
-rw-r--r--. root root Apr : .txt.bak
-rw-r--r--. root root Apr : .txt.bak
-rw-r--r--. root root Apr : .txt.bak ###-n: 指定一次处理的参数个数
[root@osker /]# find /root/ -type f -name '*.bak'|xargs -n
/root/.txt.bak /root/.txt.bak
/root/.txt.bak

注意:处理特殊文件名需要采用-0来避免特殊字符(xargs -0 )

二、exec的使用

exec参数是一个一个传递的,传递一个参数执行一次命令。
-exec 命令 {} \;
“{}”表示命令的参数即为所找到的文件;以“;”表示命令的结束,“\”是转义符,因为分号在命令中还有它用途,所以就用一个\来限定表示这是一个分号而不是表示其它意思。
PS:-ok和-exec的作用相同,格式也一样,只不过以一种更为安全的模式来执行该参数,在给出的shell运行这个命令之前,都会给出提示,让用户来确定是否执行。

[root@osker /]# find /root/ -type f -name '*.bak' -ok echo start {} \;
< echo ... /root/.txt.bak > ? y
start /root/.txt.bak
< echo ... /root/.txt.bak > ? y
start /root/.txt.bak
< echo ... /root/.txt.bak > ? y
start /root/.txt.bak [root@osker /]# find /root/ -type f -name '*.txt' -exec echo start {} \;
start /root/.txt
start /root/.txt
start /root/.txt

该处理过程为:find命令查找到第一个文件传给echo处理,然后将查找到的第二个文件传给echo处理....

三、2个命令在处理的流程上不一样所以在处理效率上也不同

[root@nfs ~]# touch {..}.txt
[root@nfs ~]# time find ./ -type f -name '*.txt' |xargs rm -f
real 0m0.203s
user 0m0.016s
sys 0m0.186s
[root@nfs ~]# touch {..}.txt
[root@nfs ~]# time find ./ -type f -name '*.txt' -exec rm {} \;
real 0m8.074s
user 0m3.717s
sys 0m4.294s

可以看到xargs在处理大量文件上时间比exec短。

总结:xargs一次将参数传给命令,可以使用-n控制参数个数;exec参数是一个一个传递的,传递一个参数执行一次命令。

xargs与exec区别的更多相关文章

  1. xargs、管道、exec区别

    作者:ilexwg链接:https://www.zhihu.com/question/27452459/answer/170834758来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  2. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

  3. linux中exec和xargs命令的区别和优劣分析

    find的exec及ok命令 exec命令的格式为: exec command {} \; exec后面跟着的是操作命令,然后跟着{}表示每一个参数,然后空格,然后"\;".{}之 ...

  4. xargs与exec详解

    一.场景 这个命令是错误的 1 find ./ -perm +700 |ls -l 这样才是正确的 1 find ./ -perm +700 |xargs ls -l  二.用法 1 2 3 4 5 ...

  5. 2.7 xargs和exec详解【转】

    本文转载自:http://ask.apelearn.com/question/13323 常用在查找中exec主要是和find一起配合使用,而xargs就要比exec用的地方要多了. exec  应用 ...

  6. 正则表达式中test,match,exec区别

    testtest 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var reg = new RegExp("1." ...

  7. query和exec区别

    1.PDO::query PDO::query执行一条SQL语句,如果通过,则返回一个PDOStatement对象.PDO::query函数有个“非常好处”,就是可以直接遍历这个返回的记录集. 示例如 ...

  8. find只查当前目录 和 -exec和xargs区别

    1.find默认查找当前目录和子目录,通过maxdepth限制只查当前目录: find . -maxdepth 1 -type f -name "*.php" 2. find . ...

  9. find -exec 与xargs 区别

    find . -name "*.txt" -exec rm {} \;find . -name "*.txt" | xargs rm {} -exec    1 ...

随机推荐

  1. 【Weiss】【第03章】练习3.6:有序多项式相加

    [练习3.6] 编写将两个多项式相加的函数.不要毁坏输入数据.用一个链表实现. 如果这两个多项式分别有M项和N项,那么你程序的时间复杂度是多少? 两个按幂次升序的多项式链表,分别维护一个指针. 幂较小 ...

  2. JSTL、请求转发和URL重定向

    JSTL 为什么要使用JSTL? 因为在JSP中写JAVA代码很麻烦,而JSTL可以简化在JSp中写JAva代码的流程 如何使用JSTL? 准备工作: ①将JSTL依赖的jar包导入工程的WEB-IN ...

  3. sql语句的基本用法总结

    一.sql语法 select */列名1,列名2... from 表名[连接查询 内连接/左连接 on条件] 必选的 where 条件 子查询/in/exists/between ... and .. ...

  4. Mol Cell Proteomics. | Identification of salivary biomarkers for oral cancer detection with untargeted and targeted quantitative proteomics approaches (解读人:卜繁宇)

    文献名:Identification of salivary biomarkers for oral cancer detection with untargeted and targeted qua ...

  5. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'employeeId' not found. Available parameters are [page, map, param1, param2] 解决方法

    原因很简单就是没映射到接口添加 @Param 注解 ->@Param("map") 然后在mapper.xml map.employeeId 再次测试 已经解决 ->

  6. 题解 P2642 【双子序列最大和】

    前言 其实这道题的关键就是在于预处理,其方法类似于 合唱队形 正文 求最大子段和 要想求出双子序列最大和,首先我们要会求出最大子段和 最大子段和的求值方法很简单 定义 \(f_i\) 为以第 \(i\ ...

  7. TensorFlow系列专题(十一):RNN的应用及注意力模型

    磐创智能-专注机器学习深度学习的教程网站 http://panchuang.net/ 磐创AI-智能客服,聊天机器人,推荐系统 http://panchuangai.com/ 目录: 循环神经网络的应 ...

  8. Input标签中属性的注意点

    readonly 只读字段,即用户不可更改,但可以通过tab切换到该字段,还可以选中复制该字段 step 输入合法的数字间隔,当step属性的值为负数或0时默认为1,可以配合max,min属性来创建合 ...

  9. 简述MySQL数据库中的Date,DateTime,TimeStamp和Time类型

    DATETIME类型 定义同时包含日期和时间信息的值时.MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:00' ...

  10. Linux和Windows环境下安装Nginx

    Nginx的安装 windows环境下安装Nginx 安装 Nginx 的下载地址如下: http://nginx.org/en/download.html 选择时尽量选择 Stable 稳定版本,点 ...