将压缩和未压缩的数据源同等对待

作者:David Sinck

有时,您需要处理许多文件——其中一些文件已被压缩,而另一些文件则没有(想想日志文件)。与其运行两个变体,一个压缩的和另一个未压缩的,不如将它包装在一个 bash 函数中

function data_source ()
{
 local F=$1

 # strip the gz if it's there
 F=$(echo $F | perl -pe 's/.gz$//')

 if [[ -f $F ]] ; then
   cat $F
 elif [[ -f $F.gz ]] ; then
   nice gunzip -c $F
 fi
}

这样可以很好地实现

for file in * ; do
 data_source $file | ...
done

无论您处理的是 gzip 压缩的文件还是未压缩的文件,您都不再需要对它们进行不同的对待。稍加努力,也可以检测和处理 bzip 文件。

加载 Disqus 评论