免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3719 | 回复: 9
打印 上一主题 下一主题

统计源代码的行数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-25 15:52 |只看该作者 |倒序浏览

  1. find -name "*.c"  -o -name "*.h" -type f -exec cat {} \; | wc -l
复制代码

这个命令发现只能统计头文件的行数,也就是说find命令结合多条件查询时,后面执行cmd时,只有 -o 后面的输出被cmd接收了?
换用管道的方式获取输入时,下述命令能够实现。

  1. find -name "*.c"  -o -name "*.h" -type f | xargs cat | wc -l
复制代码

请问如何能获取所有find命令的输出给后面的cmd呢?

[ 本帖最后由 什么名 于 2008-11-25 15:54 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
2 [报告]
发表于 2008-11-25 15:54 |只看该作者
我这么用的

  1. grep \n * -R|wc
复制代码

论坛徽章:
0
3 [报告]
发表于 2008-11-25 15:59 |只看该作者
原帖由 xinglp 于 2008-11-25 15:54 发表
我这么用的

grep \n * -R|wc

这个得到的数据不准确,大于实际值。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
4 [报告]
发表于 2008-11-25 16:01 |只看该作者
原帖由 什么名 于 2008-11-25 15:52 发表

find -name "*.c"  -o -name "*.h" -type f -exec cat {} \; | wc -l

这个命令发现只能统计头文件的行数,也就是说find命令结合多条件查询时,后面执行cmd时,只有 -o 后面的输出被cmd接收了?
换用管道的 ...


加个括号试试:

find (-name "*.c"  -o -name "*.h") -type f -exec cat {} \; | wc -l

find \(-name "*.c"  -o -name "*.h"\) -type f -exec cat {} \; | wc -l

论坛徽章:
0
5 [报告]
发表于 2008-11-25 16:52 |只看该作者
原帖由 ly5066113 于 2008-11-25 16:01 发表


加个括号试试:

find (-name "*.c"  -o -name "*.h" -type f -exec cat {} \; | wc -l

find \(-name "*.c"  -o -name "*.h"\) -type f -exec cat {} \; | wc -l

受启发,发现这样加才可以

  1. find . \( -name "*.c"  -o -name "*.h" -type f \) -exec cat {} \; | wc -l
复制代码

即要将两个查询条件均括起来  :wink: 。

论坛徽章:
0
6 [报告]
发表于 2008-11-25 17:02 |只看该作者
看来使用管道时,xargs接收整个命令所有输出,射程更远一些啊,而采用find后直接exec只接受exec之前的条件输出啊,要使其完整接收,必须加括号。可是find的manual里说除非遇到;才结束,但是加不加括号的输出都是一样的,也没看到;出来。咋解释??

ACTIONS
      -exec command ;
              Execute  command;  true  if 0 status is returned.  All following
              arguments to find are taken to be arguments to the command until
              an  argument  consisting of ';' is encountered.  The string '{}'
              is replaced by the current file name being processed  everywhere
              it occurs in the arguments to the command, not just in arguments
              where it is alone, as in some versions of find.  Both  of  these
              constructions might need to be escaped (with a '\') or quoted to
              protect them from expansion by the shell.  The command  is  exe-
              cuted in the starting directory.

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
7 [报告]
发表于 2008-11-25 17:13 |只看该作者

回复 #1 什么名 的帖子

使用括号

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
8 [报告]
发表于 2008-11-26 08:45 |只看该作者
find . -name "*.c"  -o -name "*.h" -type f  |xargs cat |wc -l

[ 本帖最后由 rdcwayx 于 2008-11-26 08:48 编辑 ]

论坛徽章:
1
2015年亚洲杯之韩国
日期:2015-04-24 09:07:02
9 [报告]
发表于 2008-11-26 08:46 |只看该作者
呵呵 和我前几天的问题相似

论坛徽章:
0
10 [报告]
发表于 2008-11-26 09:36 |只看该作者

回复 #1 什么名 的帖子

find . -name "*.[ch]" | xargs wc -l
find . -name "*.[ch]" -exec wc -l {} \;

我经常用这两个命令

[ 本帖最后由 drowsyboy 于 2008-11-26 09:38 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP