前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell利剑之xargs和time

Shell利剑之xargs和time

作者头像
吕海峰
发布2018-04-03 14:51:26
6440
发布2018-04-03 14:51:26
举报
文章被收录于专栏:BrianBrian

xargs

从标准输入中读取内容,并将此内容传递给它要协助的命令,并作为协助命令的参数来执行。

代码语言:javascript
复制
brian@local:~$ echo "1.txt 2.txt 3.txt" | xargs ls
1.txt 2.txt 3.txt

将echo的标准输出作为xargs的输入,并将输入传递给协助命令ls作为参数来执行。

xargs和管道的区别

我们通过cat命令来查看文件1.txt的内容,比如:

代码语言:javascript
复制
brian@Dmaster:~$ echo 1.txt | cat 
1.txt
brian@Dmaster:~$ echo 1.txt | xargs cat
hello world

管道可以实现将前面的标准输出作为后面的“标准输入”,它无法实现将前面的标准输出作为后面的参数执行。xargs可以实现管道无法实现的方式,如果标准输入里面包含空格和换行制表符,它会自动全部替换成空格。

代码语言:javascript
复制
brian@Dmaster:~$ echo "1.txt\n2.txt" | xargs ls
1.txt 2.txt

加入我们处理的文件名本身包含空格那应该怎么处理?比如:

代码语言:javascript
复制
brian@Dmaster:~$ for((i=0;i<3;i++)); do touch "test ${i}.log"; done
brian@Dmaster:~$ find . -name '*.log' -print | xargs rm
rm: test: No such file or directory
rm: 0.log: No such file or directory
rm: test: No such file or directory
rm: 1.log: No such file or directory
rm: test: No such file or directory
rm: 2.log: No such file or directory

我们可以通过-0参数来处理,-0表示了允许将NULL作为分隔符.find 也支持对应的选项以NULL字符作为分隔符的输出。find是通过-print0提供的。通过-0选项不仅处理很多包含空格文件,还可以处理引号,空格和反斜线等。如果我们想指定一个符号作为分割符。可以通过-d来设置。比如:

代码语言:javascript
复制
brian@Dmaster:~$ xargs -d "@"

xargs提示确认机制

如果想提示我们要执行的协助命令,可以通过-p来设置。比如:

代码语言:javascript
复制
brian@Dmaster:~$ find . -name "*.log" -print0 | xargs -0 -p rm -f
rm -f ./test0.log ./test1.log ./test2.log?..键入y或者n
#如果想一条一条处理可以通过-n参数设置
brian@Dmaster:~$ find . -name "*.log" -print0 | xargs -0 -p -n 1 rm -f
rm -f ./test0.log?...n
rm -f ./test1.log?...n
rm -f ./test2.log?...n

time

在linux里面应该是比较重要的shell命令了啊,如果你想衡量一个shell命令的执行时间,可以通过time来衡量。

代码语言:javascript
复制
brian@Dmaster:~$ time ls
china.txt	eng.txt		japan.txt	test0.log	test1.log	test2.log

real	0m0.004s
user	0m0.001s
sys	   0m0.001s
  • real:从进程ls开始执行到完成所耗费的CPU总时间。该时间包括ls进程执行时实际使用的CPU时间,ls进程耗费在阻塞上的时间和其它进程所耗费的时间。
  • user:进程ls执行用户态代码所耗费的CPU时间。该时间仅指ls进程执行时实际使用的CPU时间。不包括其它进程所使用的时间和本进程阻塞的时间。
  • sys:进程ls在内核态运行所耗费的CPU,是指有用户态通过系统调用进入内核态,内核态所耗费的时间。 所以一个shell命令的执行时间是user+sys,切记:real可能大于或者小于或者等于user+sys。sleep
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • xargs
    • xargs和管道的区别
      • xargs提示确认机制
      • time
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档