我还需要目录名称作为输出。我能做的就是输出所有目录中具有目录名称的总行数。如何统计文件的所有行
find . -name '*.c' | xargs wc -l | xargs -I{} dirname {} | xargs -I{} dirname {}
我还需要目录名称作为输出。我能做的就是输出所有目录中具有目录名称的总行数。如何统计文件的所有行
find . -name '*.c' | xargs wc -l | xargs -I{} dirname {} | xargs -I{} dirname {}
我已经混乱了bash
命令的混合物大多GNU
特异性,请确保您有他们,GNU grep
和GNU Awk
find . -type f -print0 | xargs -0 grep -c ';$' | \
awk -F":" '$NF>0{cmd="dirname "$1; while ((cmd | getline result) > 0) {printf "%s\t%s\n",result,$2} close(cmd) }'
的想法是grep -c
返回格式,file-name:count
模式计数,对此我将它传递给GNU Awk
以过滤那些计数大于零的文件,并打印包含它的文件的目录和计数本身。
由于他们称之为这几天看上一个内胆,
find . -type f -print0 | xargs -0 grep -c ';$' | awk -F":" '$NF>0{cmd="dirname "$1; while ((cmd | getline result) > 0) {printf "%s\t%s\n",result,$2} close(cmd) }'
做这份工作!感谢您的解释。 – Theseven7
这里是一个脚本:
#!/usr/bin/env bash
for dir in */; do (
cd "$dir"
count=$(find . -name '*.c' -print0 | xargs -0 grep '[;]$' | wc -l)
echo -e "${count}\t${dir}"
) done
如果你想为每个子目录编号:使用
#!/usr/bin/env bash
for dir in $(find . -type d); do (
cd "$dir"
count=$(find . -maxdepth 1 -name '*.c' -print0 | \
xargs -0 grep '[;]$' | wc -l)
echo -e "${count}\t${dir}"
) done
-maxdepth 1
确保计算仅在当前目录下完成的,而不是其子目录。所以每个文件都被计算一次。
有没有办法修改循环来查看子目录呢? – Theseven7
增加了另一个脚本。 –
你能有一个适当的例子再次重申您的要求?你能详细解释一下吗? – Inian
@Inian,基本上我想拥有目录路径和该目录中以分号结尾的行数(该目录中所有文件的行数)。我可以用'find'输出在目录中以分号结尾的行的总数。 -name'* .c'-print0 | xargs -0 grep'[;] $'| wc -l',但我不知道如何通过目录获取输出。 – Theseven7
@Inian,做到了。 – Theseven7