xargs的使用

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

测试

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使用介绍的文章, 很赞.

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一行Shell代码查找所有代码行数

    最近写简历, 想算下自己的这个项目一共有多少行代码, 好方便在简历上展示. 本来想着一直用git管理代码, 顺便统计下好了. 结果竟然没有在git中找到单独统计...

    望天
  • Ubuntu18.04上使用LLDB调试Chromium Android C++代码

    Chromium Android源代码庞大且复杂。 在调试器LLDB下能帮助我们更好的理解代码流程。 介绍使用LLDB调试器调试android上chro...

    望天
  • Siemens NX 9.0和 UG 4.0 同时安装

    主要是解决能还是不能的问题,答案是确定的,能。Siemens NX 9.0的licence Server可以管理UG 4.0的licence。

    望天
  • 「企业架构」TOGAF的权威指南

    TOGAF(开放式集团架构框架)已经被企业架构师(EAs)用作规划IT开发策略的通用语言超过25年了。该计划于1995年成立,目的是协助企业和企业架构师以有组织...

    首席架构师智库
  • 企鹅巧设鸿门宴,雄心欲起战企业级市场

    中秋节前,腾讯产业共赢基金邀请国内的企业社交公司开了一个小型内部研讨会。在腾讯发力企业级市场的档口,这个会议为何而来?承载了什么使命?与会各家都谈了些什么?风云...

    人称T客
  • java循环队列实现相关方法

    循环队列相关背景### 什么是队列就不解释了 头尾相接的顺序存储结构称为循环队列(circular queue)。 循环队列中需要注意的几个重要问题: ①队空...

    张俊怡
  • 递归求最大子串序列长度

    递归求最大子串序列长度 import java.util.Scanner; /** * Created by junyi.pc on 2017/1/25....

    张俊怡
  • 递归解决组合问题

    比如从5个当中选2个 import java.util.Scanner; /** * Created by junyi.pc on 2017/1/25. ...

    张俊怡
  • java实现多种排序算法

    冒泡排序 /** * Created by junyi.pc on 2017/1/25. */ import java.util.Calendar; im...

    张俊怡
  • Android App多个入口的实现方法

    经常看到有App提供多个入口,就是桌面上显示有多种图标,点不同图标进入不同的功能页。

    砸漏

扫码关注云+社区

领取腾讯云代金券