在目录上递归计算.gz文件的行数?

时间:2014-02-27 09:57:25

标签: bash shell unix

我有数百个目录,每个目录包含.gz个文件,我想计算该.gz个文件的行。

我尝试了以下一个内容来实现这一点,但它不起作用说gzip:stdin:意外的文件结尾

find . type -f -name '*.data.gz' | gunzip -c  | wc -l 

例如如果有两个目录,每个目录有一个.gz文件,并假设每个目录有100行,那么我想要输出总共200行。

4 个答案:

答案 0 :(得分:8)

你在那里......:

find . -type f -name '*.gz' | xargs zcat | wc -l

答案 1 :(得分:3)

gzip -dc *.gz | wc -l

-d解压缩 -c到STDOUT(不是磁盘)

gzip -dcr * | wc -l

-d decompress

-c到STDOUT(不是磁盘)

-r recursive(看看直系)

答案 2 :(得分:1)

我的目录:

.
├── a.gz
├── b.gz
└── t
    └── f.gz

命令回显并计算找到的每个gz文件的行:

find . -type f -name '*.gz' -exec bash -c 'echo $1;gunzip -c $1 | wc -l' dummy {} \;

输出:

./a.gz
5
./b.gz
6
./t/f.gz
3

然后,为了获得总计:

echo $((`find . -type f -name '*.gz' -exec bash -c 'gunzip -c $1 | wc -l' dummy {} \;  | paste -sd+`))

输出:

14

答案 3 :(得分:0)

您可以使用此代码段。

#!/bin/bash

gzfiles=`find . -name '*.data.gz'`

total_line_count=0
if [ $? -eq 0 ]; then
        echo "Found at:"
        for file in $gzfiles
                do
                        echo " - $file"
                        fl_line_count=`gunzip $file -c | wc -l`
                        total_line_count=`expr $total_line_count + $fl_line_count`
                done
        else
                echo "No GZIP file found :("
fi

echo "Line count: $total_line_count"