代码之家  ›  专栏  ›  技术社区  ›  Richard H

bash:如何将一个命令的每个结果传输到另一个命令

  •  1
  • Richard H  · 技术社区  · 15 年前

    我想得到 全部的 以下命令返回的所有文件中的行数计数:

    shell> find . -name *.info
    

    所有.info文件都嵌套在子目录中,因此我不能简单地执行以下操作:

    shell> wc -l *.info
    

    我确信这应该出现在任何bash用户的剧目中,但是我被卡住了!

    谢谢

    6 回复  |  直到 15 年前
        1
  •  2
  •   kennytm    15 年前
    wc -l `find . -name *.info`
    

    如果你只想要总数,用

    wc -l `find . -name *.info` | tail -1
    

    编辑:管道到 xargs 也可以,希望可以避免“命令行太长”。

    find . -name *.info | xargs wc -l
    
        2
  •  2
  •   a'r    15 年前

    你可以使用 xargs 像这样:

    find . -name *.info -print0 | xargs -0 cat | wc -l
    
        3
  •  1
  •   second    15 年前

    出现了一些谷歌搜索

    find /topleveldirectory/ -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'
    

    这似乎起了作用

        4
  •  0
  •   ghostdog74    15 年前
    #!/bin/bash
    # bash 4.0
    shopt -s globstar
    sum=0
    for file in **/*.info
    do
       if [ -f "$file" ];then
           s=$(wc -l< "$file")
           sum=$((sum+s))
       fi
    done
    echo "Total: $sum"
    
        5
  •  0
  •   JeremyP    15 年前
    find . -name "*.info" -exec wc -l {} \;
    

    自述问题的注意事项

    find . -name "*.info" -exec cat {} \; | wc -l
    
        6
  •  0
  •   zaga    15 年前
    # for a speed-up use: find ... -exec ... '{}' + | ...
    find . -type f -name "*.info" -exec sed -n '$=' '{}' + | awk '{total += $0} END{print total}'
    
    推荐文章