前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >xargs的使用

xargs的使用

作者头像
望天
发布2018-08-02 11:38:04
5910
发布2018-08-02 11:38:04
举报
文章被收录于专栏:along的开发之旅along的开发之旅

前段时间查自己的代码行数时, 用了”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;”开始, 我们接下来执行如下指令:

测试

代码语言:javascript
复制
find . -name "*.cs" | less

显示结果为:

代码语言:javascript
复制
./SmallInsert.cs

接下来我们加上 xargs试下:

代码语言:javascript
复制
find . -name "*.cs" | xargs less

显示结果为:

代码语言:javascript
复制
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使用介绍的文章, 很赞.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年04月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档