将压缩和未压缩的数据源同等对待
发布于 2008 年 12 月 19 日
有时,您需要处理许多文件——其中一些文件已被压缩,而另一些文件则没有(想想日志文件)。与其运行两个变体,一个压缩的和另一个未压缩的,不如将它包装在一个 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 文件。