Shell利剑之xargs和time


xargs

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

brian@local:~$ echo "1.txt 2.txt 3.txt" | xargs ls
1.txt 2.txt 3.txt

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

xargs和管道的区别

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

brian@Dmaster:~$ echo 1.txt | cat 
1.txt
brian@Dmaster:~$ echo 1.txt | xargs cat
hello world

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

brian@Dmaster:~$ echo "1.txt\n2.txt" | xargs ls
1.txt 2.txt

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

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来设置。比如:

brian@Dmaster:~$ xargs -d "@"

xargs提示确认机制

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

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来衡量。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杂烩

Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF

原因是升级后的tomcat设置了url参数解析规则,限制非法字符,如  |  ,解决办法是:

3382
来自专栏Python爬虫实战

Python生成目录树

在 windows 系统中,有一个 CMD 指令可以生成目录树,该条指令是 "tree" 。

3341
来自专栏文渊之博

如何使用Python读取大文件

背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方...

78512
来自专栏刘望舒

React Native探索(五)使用fetch进行网络请求

前言 React Native可以使用多种方式来进行网络请求,比如fetch、XMLHttpRequest以及基于它们封装的框架,fetch可以说是替代XMLH...

3197
来自专栏小灰灰

Java并发学习之Volatile及内存模型探究

volatile工作原理 java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。 Java语言...

2349
来自专栏程序员同行者

django基础之二

1384
来自专栏Brian

Shell利剑之export、read和history

---- 概述 最近在学习shell,发现自己shell的强大,强大的已经被他征服。热爱shell,利用shell,珍惜生命。哈哈哈,现在最流行的两个shell...

2613
来自专栏python学习路

八、线程和进程 什么是线程(thread)?什么是进程(process)? 线程和进程的区别?Python GIL(Global Interpreter Lock)全局解释器锁

什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一...

4817
来自专栏黑泽君的专栏

c语言基础学习02_helloworld

============================================================================= 涉及...

1791
来自专栏我的博客

WorkMan手册笔记-定时器类

一、定时执行某个函数或者类方法 int \Workerman\Lib\Timer::add(float $time_interval, callable $ca...

3857

扫码关注云+社区

领取腾讯云代金券