xargs的使用
2016-04-11 10:10
549 查看
前段时间查自己的代码行数时, 用了”find . -name “*.cs” | xargs wc -l“, 但是对xargs在这里的作用有点不了解, 因为网上资料主要都在说 xargs的如下作用:
1. 给其他命令传递参数的一个过滤器
2. xargs可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
3. 防止溢出, 一次从标准输入只读取一部分值, 但是我这里不存在溢出的问题.
根据man手册, xargs的作用是 “xargs从stdin读入每一条, 并且以空白字元或断行字元作为分辨, 将stdin的条目分隔成为 arguments. 因为是以空白字元作为分隔, 所以如果有一些档名或者是其他意义的名词内含有空白字元的时候, xargs 可能会误判, 如果需要处理特殊字符, 需要使用-0参数进行处理.”
直接举例子:
当前目录中只有一个SmallInsert.cs文件,其内容以”using System;using System.Collections.Generic;using System.Linq;using System.Text;”开始, 我们接下来执行如下指令:
显示结果为:
接下来我们加上 xargs试下:
显示结果为:
可以看到不加xargs时, 只会将find的结果打印出来. 加上xargs, 会将find找到的cs文件的内容显示出来.
这里就可以看出xargs 和 管道直接传的一个重要区别:
管道是实现”将前面的标准输出作为后面的标准输入”.
xargs是实现”将标准输入作为命令的参数”.
所以
find: 负责找到所有符合要求的cs文件路径.
xargs: 将cs文件路径以命令参数的形式传给wc.
wc: wc -l 加上find传进来的参数. 形如”wc -l ./SmallInsert.cs”, 这样就可以查找这个cs文件一共有多少行代码.
这里有个对xargs使用介绍的文章, 很赞.
1. 给其他命令传递参数的一个过滤器
2. xargs可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
3. 防止溢出, 一次从标准输入只读取一部分值, 但是我这里不存在溢出的问题.
根据man手册, xargs的作用是 “xargs从stdin读入每一条, 并且以空白字元或断行字元作为分辨, 将stdin的条目分隔成为 arguments. 因为是以空白字元作为分隔, 所以如果有一些档名或者是其他意义的名词内含有空白字元的时候, xargs 可能会误判, 如果需要处理特殊字符, 需要使用-0参数进行处理.”
直接举例子:
当前目录中只有一个SmallInsert.cs文件,其内容以”using System;using System.Collections.Generic;using System.Linq;using System.Text;”开始, 我们接下来执行如下指令:
测试
find . -name "*.cs" | less
显示结果为:
./SmallInsert.cs
接下来我们加上 xargs试下:
find . -name "*.cs" | xargs less
显示结果为:
using System; using System.Collections.Generic; using System.Linq; using System.Text; ........
可以看到不加xargs时, 只会将find的结果打印出来. 加上xargs, 会将find找到的cs文件的内容显示出来.
这里就可以看出xargs 和 管道直接传的一个重要区别:
管道是实现”将前面的标准输出作为后面的标准输入”.
xargs是实现”将标准输入作为命令的参数”.
所以
find . -name "*.cs" | xargs less最终变为 less ./SmallInsert.cs, 这样就会把SmallInsert.cs的内容显示出来. 而
find . -name "*.cs" | less只是利用管道, 把结果直接显示出来.
结论
find, xargs和wc联合使用, 查找代码行数的思路如下:find: 负责找到所有符合要求的cs文件路径.
xargs: 将cs文件路径以命令参数的形式传给wc.
wc: wc -l 加上find传进来的参数. 形如”wc -l ./SmallInsert.cs”, 这样就可以查找这个cs文件一共有多少行代码.
这里有个对xargs使用介绍的文章, 很赞.
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- shell字符串操作详解
- Shell中删除某些文件外所有文件的3个方法
- Ruby中执行Linux shell命令的六种方法详解
- VB使用shell函数打开外部exe程序的实现方法
- Shell编程的一些知识集合
- Shell中的for和while循环详细总结
- 什么是Shell?Shell脚本基础知识详细介绍
- Shell脚本中引用、调用另一个脚本文件的2种方法
- Shell脚本解压rpm软件包
- Linux Shell 数组建立及使用技巧
- Shell脚本实现复制文件到多台服务器的代码分享
- Shell脚本实现批量替换文件内容
- Shell脚本实现的一个简易Web服务器例子分享
- linux Shell学习笔记第五天