exec与xargs区别
区别描述: 两者都是对符合条件的文件执行所给的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区别的更多相关文章
- find只查当前目录 和 -exec和xargs区别
1.find默认查找当前目录和子目录,通过maxdepth限制只查当前目录: find . -maxdepth 1 -type f -name "*.php" 2. find . ...
- find -exec 与xargs 区别
find . -name "*.txt" -exec rm {} \;find . -name "*.txt" | xargs rm {} -exec 1 ...
- linux中exec和xargs命令的区别和优劣分析
find的exec及ok命令 exec命令的格式为: exec command {} \; exec后面跟着的是操作命令,然后跟着{}表示每一个参数,然后空格,然后"\;".{}之 ...
- -exec 与 xargs 的区别
实地在shell里执行下如下命令就知道区别了: $ find -type f -exec echo {} \; 很明显,exec是对每个找到的文件执行一次命令.从这里可以看出exec的缺点是每处理一个 ...
- linux find查找并拷贝 exec xargs区别
-exec 1.参数是一个一个传递的,传递一个参数执行一次rm 2.文件名有空格等特殊字符也能处理-xargs 1.一次将参数传给命令,可以使用-n控制参数个数 2.处理特殊 ...
- linux exec和xargs的区别
-exec 1.参数是一个一个传递的,传递一个参数执行一次,效率低 2.文件名有空格等特殊字符也能处理 -xargs 1.一次将参数传给命令,可以使用-n控制参数个数 ...
- -exec和|xargs
注意xargs会被空格割裂,所以遇到带有空格的文件名就不好办了,解决方法是使用-print0 例如:删除.目录下30天之前的.png文件 -type f -name rm 或者使用-exec:删除.目 ...
- test、exec、match区别
test.exec.match的简单区别 1.test test 返回 Boolean,查找对应的字符串中是否存在模式. var str = "1a1b1c"; var reg = ...
- js中, match和exec方法的区别
1. 来源分别为: string.match(reg) 和 RegExp.exec(str): 2. 区别 > 现有 字符串s1 和 正则对象 r1. 目标: 抽出s1中的所有电话号码 ...
随机推荐
- PropertyGird( 属性表格) 组件
本节课重点了解 EasyUI 中 PropertyGird(属性表格)组件的使用方法,这个组件依赖于 DataGrid(数据表格)组件. 一. 加载方式 //class 加载方式<table i ...
- ComboBox( 下拉列表框)
一. 加载方式//class 加载方式<select id="box" class="easyui-combobox" name="box&qu ...
- 国外.net学习资源网站
转载 :出处:http://www.cnblogs.com/kingjiong/ 名称:快速入门地址 http://chs.gotdotnet.com/quickstart/ 描述:本站点是微软.NE ...
- canvas.toDataURL(type, args)
canvas.toDataURL(type, args)该方法能够将canvas转换为图像,图像是基于Base64编码的.如果不指定两个参数,无参数调用该方法,转换的图像格式为png格式 •type: ...
- 【socket.io研究】0.前提准备
WebSocket出现之前,web实时推送,一般采用轮询和Comet技术(可细分为长轮询机制和流技术两种),需要大量http请求,服务器受不了.HTML5定义了WebSocket协议,基于TCP协议, ...
- cocos2dx Sprite的多种创建方法
1.通过文件创建 Sprite *bg = Sprite::create("backGround.jpg"); 2.通过图片的某个区域创建 SpriteFrame *frame = ...
- MySql不支持主外键
创建表不支持主外键,能够添加外键成功,但是无法外键约束.查资料发现MySql的默认ENGINE 为MyISAM ,不支持外键,需要修改为 INNODB 修改前: Create Table CREAT ...
- phpcms9添加301跳转
在做301跳转时遇到了"错误 310 (net::ERR_TOO_MANY_REDIRECTS):重定向过多."的问题,小编在这里把处理方法简单给大家写出来希望可以帮助到大家,另外 ...
- MySQL 聚簇索引
聚簇索引并不是一种单独的索引类型,而是一种数据存储方式.具体的细节依赖于其实现方式,但innoddb 的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行. 当表有聚簇索引时,它的数据实际上存 ...
- MySQL主从问题
Mysql数据库主从心得整理 管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验 ...