[原创]find的exec参数和xarg性能对比_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4068 | 回复: 0   主题: [原创]find的exec参数和xarg性能对比        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2014-5-30 11:02:09 | [全部帖] [楼主帖] 楼主

如果一个文件夹下有大量的文件,则对这些文件进行操作的时候,很可能会出现“参数列表过长”的错误提示,解决的方法主要有:

(1)写脚本;

(2)通过find的exec参数来实现

(3)用xargs

(4)上级目录操作

这几种方式,到底哪一种快呢?我们来做一下对比。

环境:/web/upload下,有6万个文件

%cd /web/upload
% ll | wc
60552 544961 4824590


操作方式:

    共六种操作,由于是远程操作,显示大量文件名时会受带宽的影响,所以ls –l后重定向到/dev/null:

find –exec两种,分别用分号和加号结束

xargs两种,一种用print0,另一种默认

写脚本

对上级目录操作

1、直接find,用分号结束:

% time find /web/upload -name " eclass*" -exec ls -l {} > /dev/null \;
27.279u 92.251s 2:19.79 85.4% 40+169k 2043+0io 0pf+0w


2、直接find,用分号结束:

% time find /web/upload -name " eclass*" -exec ls -l {} > /dev/null +
0.456u 1.085s 0:15.18 10.0% 38+316k 1379+0io 0pf+0w
3、xarg –0


 由于没法直接用命令重定向到/dev/null,所以还是写了一个脚本:

% time ./a.sh
0.437u 1.266s 0:15.57 10.8% 39+480k 1392+0io 0pf+0w
% cat a.sh
find /web/upload -name "eclass*" -print0|xargs -0 ls -l > /dev/null


4、普通的xarg

% time ./b.sh
0.478u 1.225s 0:15.47 10.9% 34+425k 1323+0io 0pf+0w
% cat b.sh
find /web/upload -name "eclass*" |xargs ls -l > /dev/null


5、普通sh脚本:

% time ./c.sh
34.369u 122.142s 3:45.42 69.4% 76+172k 6710+0io 0pf+0w
% cat c.sh
for i in /web/upload/eclass*;
do ls -l "$i" > /dev/null ;
done


6、直接对上级文件夹进行ls

% time ls -l /web/* > /dev/null
0.634u 1.029s 0:07.97 20.7% 36+177k 523+0io 0pf+0w


通过上面的结果,我们可以得出结论:

(1)find –exec +的方式最快,比分号结束的方式要快十倍,据说这种方式最为优化。

(2)普通脚本最慢,这也在情理之中。

(3)xarg 的速度跟find用加号结束的速度差不多,表现非常不错。

(4)xarg 用-0参数,并没见到很大优势,这是因为man中提到,在有空格的场合才能提高速度,这有待于以后再测试。

(5)原生的ls最快,但是不能对下一级目录使用通配符,也不能指定其中的某一个目录,所以不适用于存在很多兄弟目录的情况。

该贴由hui.chen转至本版2014-11-5 17:04:58




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论