我有数百个目录,每个目录包含.gz
个文件,我想计算该.gz
个文件的行。
我尝试了以下一个内容来实现这一点,但它不起作用说gzip:stdin:意外的文件结尾
find . type -f -name '*.data.gz' | gunzip -c | wc -l
例如如果有两个目录,每个目录有一个.gz文件,并假设每个目录有100行,那么我想要输出总共200行。
答案 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"