区别描述: 两者都是对符合条件的文件执行所给的Linux 命令,而不询问用户是否需
要执行该命令。

-exec:{}表示命令的参数即为所找到的文件,以;表示comman命令的结束。\是转义符,
因为分号在命令中还有它用途,所以就用一个\来限定表示这是一个分号而不是表示其它意思。

-ok: 和 -exec 的作用相同,格式也一样,只不过以一种更为安全的模式来执行该参数
所给出的shell给出的这个命令之前,都会给出提示,让用户来确定是否执行。

xargs 要结合管道来完成
格式:find [option] express |xargs command

用一个实例来看看exec和xargs是如何传参数的:

$find test/ -type f
test/myfile.name
test/files/role_file
test/files/install_file


$find test/ -type f |xargs echo
test/myfile.name test/files/role_file test/files/install_file


$find test/ -type f -exec echo {} \;
test/myfile.name
test/files/role_file
test/files/install_file
很明显,exec是对每个找到的文件执行一次命令,除非这单个的文件名超过了几k,否则不
会出现命令行超长出报错的问题。

而xargs是把所有找到的文件名一股脑的转给命令。当文件很多时,这些文件名组合成的命
令行参数很容易超长,导致命令出错。

另外, find | xargs 这种组合在处理有空格字符的文件名时也会出错,因为这时执行的命令
已经不知道哪些是分割符、哪些是文件名中的空格! 而用exec则不会有这个问题。


比如做个演示:

$touch test/'test zzh'

$find test/ -name *zzh
test/test zzh

$find test/ -name *zzh |xargs rm
rm: cannot remove `test/test': No such file or directory
rm: cannot remove `zzh': No such file or directory

$find test/ -name *zzh -exec rm {} \;

相比之下,也不难看出各自的缺点
1、exec 每处理一个文件或者目录,它都需要启动一次命令,效率不好;
2、exec 格式麻烦,必须用 {} 做文件的代位符,必须用 \; 作为命令的结束符,书写不便。
3、xargs 不能操作文件名有空格的文件;

综上,如果要使用的命令支持一次处理多个文件,并且也知道这些文件里没有带空格的文件,
那么使用 xargs比较方便; 否则,就要用 exec了。

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

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

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

  2. find -exec 与xargs 区别

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

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

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

  4. -exec 与 xargs 的区别

    实地在shell里执行下如下命令就知道区别了: $ find -type f -exec echo {} \; 很明显,exec是对每个找到的文件执行一次命令.从这里可以看出exec的缺点是每处理一个 ...

  5. linux find查找并拷贝 exec xargs区别

    -exec    1.参数是一个一个传递的,传递一个参数执行一次rm    2.文件名有空格等特殊字符也能处理-xargs     1.一次将参数传给命令,可以使用-n控制参数个数    2.处理特殊 ...

  6. linux exec和xargs的区别

    -exec     1.参数是一个一个传递的,传递一个参数执行一次,效率低     2.文件名有空格等特殊字符也能处理 -xargs      1.一次将参数传给命令,可以使用-n控制参数个数     ...

  7. -exec和|xargs

    注意xargs会被空格割裂,所以遇到带有空格的文件名就不好办了,解决方法是使用-print0 例如:删除.目录下30天之前的.png文件 -type f -name rm 或者使用-exec:删除.目 ...

  8. test、exec、match区别

    test.exec.match的简单区别 1.test test 返回 Boolean,查找对应的字符串中是否存在模式. var str = "1a1b1c"; var reg = ...

  9. js中, match和exec方法的区别

    1. 来源分别为: string.match(reg) 和 RegExp.exec(str): 2. 区别 >  现有 字符串s1 和 正则对象 r1.     目标: 抽出s1中的所有电话号码 ...

随机推荐

  1. Angular.js中的$injector服务

    一 .angular中的依赖注入 angular的一个很重要的特性就是依赖注入,可以分开理解这4个字. 1.依赖: angular里面的依赖,有angular默认提供的,也有我们自己添加的.默认提供的 ...

  2. C#读取word模版并对指定域写入数据保存为新word

    引用: using System;using System.Collections.Generic;using System.Aspose.Words;using System.Windows.For ...

  3. Java Se 基础系列(笔记) -- Exception && Array

    Exception 1.java 异常是java提供的用于处理程序中错误(指在程序运行的过程中发生的一些异常事件)的一种机制 2.java程序的执行过程中如果发生异常事件则自动生产一个异常类对象,该对 ...

  4. angular ng-bind-html 对src路径失效 解决方案

    json内容 ;<img src="/newsfile/1506271512489.jpg" width="600" height="450&q ...

  5. css应用四

    1.Float属性详解 float属性定义元素在哪个方向浮动. Left 左浮动: Right 右浮动: None 默认,不浮动: Inherit 继承父元素float属性. 示例一: <div ...

  6. PHP 汉字转拼音(首拼音,所有拼音)

    <?php /** +------------------------------------------------------ * PHP 汉字转拼音 +------------------ ...

  7. PHP面向对象的构造方法与析构方法

    构造方法与析构方法是对象中的两个特殊方法,它们都与对象的生命周期有关.构造方法时对象创建完成后第一个被对象自动调用的方法,这是我们在对象中使用构造方法的原因.而析构方法时对象在销毁之前最后一个被对象自 ...

  8. 转载的别人的ajax跨域解决方法

    http://dynamic.vip.xxxxxx.com/active/<controllers>/<active>/<id> 放在浏览器地址栏中访问可以得到正确 ...

  9. swift闭包-备

    我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式.函数参数和函数返回值,闭包表达式的运算结果是一种函数类型. Swift中的闭包类似于Objective-C中的代码块.J ...

  10. cf B. Valera and Contest

    http://codeforces.com/contest/369/problem/B 先对k个处理,先处理sk%k个为sk/k+1,如果sk/k==0,k个数都为sk/k:对与剩下的数也按照同样的方 ...