xargs与exec命令执行效率问题

xargs,exec都是命令传递的过滤器,捕捉前面一个命令的结果,并将其传递到后一个命令。简单点说:

  • -exec  要结合{}\;来用, {}表示前面查询的结果\;结束符,这是固定的写法.
  • xargs  要结合
    |来操作,在处理批处理文件时,速度要快些。

做了一个小实验,统计整个Linux系统,文件大小在1k,10k,100k之上的文件,将其列出来:

  • 文件大小为100k比较

[[email protected] ~]# time -p find / -size +100k | xargs ls -lart {} \;
real 7.29
user 1.31
sys 6.89

[[email protected] boot]# time -p find / -size +100k -exec ls -lart {} \;
real 31.00
user 6.06
sys 20.88
  • 文件大小为10比较
[[email protected] ~]# time -p find / -size +10k | xargs ls -lart {} \;
real 12.43
user 3.96
sys 8.99

[[email protected] ~]# time -p find / -size +10k -exec ls -lart {} \;
real 105.14
user 20.38
sys 67.65
  • 文件大小为1k的比较

[[email protected] ~]# time -p find / -size +1k | xargs ls -lart {} \;
real 28.62
user 5.72
sys 24.01

[[email protected] ~]# time -p find / -size +1k -exec ls -lart {} \;
real 703.89
user 129.08
sys 456.97

Note:

  • 文件比较少时,两者的执行效率相差几倍.
  • 文件比较多时,两者的执行效率相差几十倍.

时间: 2024-10-06 12:40:25

xargs与exec命令执行效率问题的相关文章

shell exec命令执行shell打印输出到一个文件

[[email protected] ~]# cat 1.sh #!/bin/bash exec 1>> /tmp/2.log 2>>/tmp/2.log date echo 111 ldkkdfkslfds date [[email protected] ~]# ./1.sh [[email protected] ~]# cat /tmp/2.log Sat Jun 9 15:08:19 UTC 2018 111 ./1.sh: line 6: ldkkdfkslfds: com

xargs和exec详解、screen命令、curl命令

1.xargs和exec详解xargs execfind /var/log/  -type f  -mtime +10   (超过10天的文件)find /var/log/  -type f  -mtime +10  -exec cp {} {}.bak \; (将找到的文件都复制成.bak文件)find /var/log/  -type f  -mtime +10  |xargs  -i cp {}  {}.1  (复制重命名)ls |xargsls x* ls x*  |xargs rmls

转:LNMP虚拟主机PHP沙盒绕过/命令执行(php exec命令被禁之后)

LNMP虚拟主机PHP沙盒绕过/命令执行 lnmp更新1.2版本,很多东西都升级了,很棒.不过还是发现一个BUG. LNMP是一款linux下nginx.php.mysql一键安装包. 下载:http://soft.vpser.net/lnmp/lnmp1.2.tar.gz 执行一个命令即可简单安装. 漏洞详情 LNMP是这样配置沙盒的: disable_functions,配置在 include/php.sh中: 其值为: 1 passthru,exec,system,chroot,scand

exec命令详解

exec: 在bash下输入man exec,找到exec命令解释处,可以看到有"No new process is created."这样的解释,这就是说exec命令不产生新的子进程.那么exec与source的区别是什么呢? exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行. 1. 系统调用exec是以新的进程去代替原来的进程,但进程的PID保持不变.因此,可以这样认为,exec系统调用并没有创建新的进程,只是替换了原来进程上下文的内容.原进

Linux中exec命令相关

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两类:外部命令和内部命令.外部命令是通过系统调用或独立的程序实现的,如sed.awk等等.内部 命令是由特殊的文件格式(.def)所实现,如cd.history.exec等等. 在说明exe和source的区别之前,先说明一下fork的概念. fork是linux的系统调用,用来创建子进程(child

Linux基础:Linux(BASH)命令执行和搜索机制

程序是如何被执行的? 当操作系统启动之后,就会等待用户操作.那么用户是如何与操作系统沟通呢?如何触发程序执行呢? 通常,与操作系统交互,有两种实现方式:CLI(command line interface); CUI(graphic user interface). 比如,当我们启动 windows系统,我们想看电影,听音乐,那么我们必须去触发程序的快捷方式,以启动程序. 同理,Linux要与kernel交互,必须通过一个shell的程序.Linux命令的执行必须依赖于Shell命令解释器.Sh

xargs与exec详解

一.场景 这个命令是错误的 1 find ./ -perm +700 |ls -l 这样才是正确的 1 find ./ -perm +700 |xargs ls -l  二.用法 1 2 3 4 5 6 7 8 9 10 11 12 [[email protected] tmp]# xargs --help Usage: xargs [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]        [-E eof-str] [-e[e

简单十招提高jQuery执行效率

1. 使用最新版本的jQuery jQuery的版本更新很快,你应该总是使用最新的版本.因为新版本会改进性能,还有很多新功能. 下面就来看看,不同版本的jQuery性能差异有多大.这里是三条最常见的jQuery选择语句: $('.elem') $('.elem', context) context.find('.elem') 我们用1.4.2.1.4.4.1.6.2三个版本的jQuery测试,看看浏览器在1秒内能够执行多少次.结果如下: 可以看到,1.6.2版本的运行次数,远远超过两个老版本.尤

命令执行的tip

先看一个例子:本地测试环境:php 5.4.45 + win <?php $command = 'dir '.$_POST['dir']; $escaped_command = escapeshellcmd($command); var_dump($escaped_command); file_put_contents('out.bat',$escaped_command); system('out.bat'); ?> 应该如何去绕过执行? escapeshellcmd http://php.